#include<stdio.h>
#include<stdlib.h>
// using malloc
void main(){
int n,i;
printf("Enter size of n \n");
scanf("%d",&n);
int *A = (int*)malloc( sizeof(int) * n );
/* for(i=0;i<n;i++){
A[i] = i+1;
}*/
printf("Values in Array \n");
for(i=0;i<n;i++){
printf("%d ",A[i]);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中我必须得到输出作为垃圾值,但我得到全零为什么? (为什么我期待垃圾值是malloc默认分配是垃圾值)
抱歉英语不好......
我故意试图在C中获取NULL指针,但我没有这样做.这是我编码的内容:
int main(void) {
int x; //UNINITIALIZED so that it will represent "nothing"
int *null_test = &x;
printf("This should be null %p \n", null_test);
}
Run Code Online (Sandbox Code Playgroud)
但它给了我一个地址:0x7fd96c300020这似乎NULL不像我希望的那样.
为什么?我甚至没有初始化x但仍然不是null?
我正在使用Valgrind来调试我的代码,当我struct通过比较来测试是否初始化时,我会收到警告NULL.
void main()
{
int *unassignedPointer;
if(unassignedPointer == NULL)
printf("This Pointer is NULL\n");
}
Run Code Online (Sandbox Code Playgroud)
此代码编译并运行,但是当通过Valgrind运行时,它会发出警告:条件跳转或移动取决于未初始化的值.与之比较的重点NULL是确定它是否已初始化.这是一种危险的做法,还是应该忽略这些警告?
我正在测试一些代码,以了解如何在c中实现2d数组。然后我遇到了以下问题。
代码是:
int main(){
int a[4][4];
printf("a: %p, *a: %p, **a: 0x%x\n",a,*a,**a);
}
Run Code Online (Sandbox Code Playgroud)
我用32位ubuntu gcc编译了这个
结果是:
a:0xbf9d6fdc,* a:0xbf9d6fdc,** a:0x0
我期望a和的值不同*a,但是它们是相同的。
为什么a和*a在这种情况下相同?是不是a一个int**类型?
那么,*操作员的作用是什么*a?
摘自李普曼的《C++ Primer》,
当我们定义一个变量时,我们应该给它一个初始值,除非我们确定在该变量用于任何其他目的之前该初始值将被覆盖。如果我们不能保证变量在被读取之前会被重置,我们应该初始化它。
如果在操作中使用未初始化的变量会发生什么?它会崩溃/代码会无法编译吗?
我在互联网上搜索了相同的答案,但有不同的“说法”。因此出现以下问题,
C 和 C++ 标准在处理未初始化变量的方式上是否有所不同?
对于类似的疑问,如何以及在哪里可以找到“官方”答案?对于业余爱好者来说查找 C 和 C++ 标准实用吗?
我有一个问题,在c ++中添加数字类型并且无法弄清楚为什么会发生这种情况,我希望当我输入3个保龄球分数时我会得到9或9.00,而我得到像3.31748e + 258这样的疯狂,我在做什么错误?任何帮助都会有很长的路要走!
#include<iostream>
#include<cmath>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
/*Coordinate variables*/
double bowlTotal;
double bowlScore;
const int FIVE_PLAYERS = 5;
for( int players = 0; players < FIVE_PLAYERS ; players++ )
{
cout << "Player " << players + 1 << endl << endl;
for( int games = 0; games < 3; games++ )
{
double score;
score = 0;
cout << "Please enter score for game #" << games + …Run Code Online (Sandbox Code Playgroud) 我是一名专业的 C# 程序员,但我对 C++ 很陌生。我对指针的基本概念很好,但我一直在玩。您可以通过将指针转换为 来获取指针的实际整数值int:
int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;
Run Code Online (Sandbox Code Playgroud)
这是有道理的;这是一个内存地址。但是我可以移动到下一个指针,并将其转换为int:
int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;
int* jptr = (int*)((int)iptr + 1);
int j = (int)*iptr;
Run Code Online (Sandbox Code Playgroud)
我得到了一个看似随机的数字(虽然这不是一个好的 PSRG)。这个数字是多少?它是同一进程使用的另一个号码吗?它可能来自不同的过程吗?这是不好的做法,还是不允许的?如果没有,这有什么用吗?这有点酷。
例如,在以下代码中:
int myarray[3];
int x = myarray[1];
Run Code Online (Sandbox Code Playgroud)
代码是否保证在恒定时间内成功执行,x具有一些整数值?或者编译器是否可以跳过为这个完全/发出代码发出代码来启动GNU Chess并仍然符合C++标准?
这在类似于数组的数据结构中很有用,但可以在恒定时间内初始化.(对不起,我没有Aho,Hopcroft和Ullman的副本,所以不能查找名字.)
我编写了一个简单的时钟,发现虽然小时和秒都可以,但如果我在一行上声明变量,分钟就不行了(分钟从 16 开始,而不是像预期的那样从 0 开始)。
如果我在单独的行上声明变量,问题就解决了。我还是很好奇,有人知道为什么吗?
这是代码:
#include <stdio.h>
#include <windows.h>
//h=hours, m=minutes, s=seconds.
int main(){
int h, m, s = 0; //THIS IS THE LINE: WHY "m" STARTS AT 16 AND NOT 0?
int delay = 1000;
while(1){
s++;
if(s>59){
m++;
s=0;
}
if(m>59){
h++;
m=0;
}
if(h>12){
h=1;
}
printf("\n %02d:%02d:%02d", h, m, s);
Sleep(delay);
system("cls");
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码:
#include <stdio.h>
int main()
{
int arr2[5];
arr2[0] = 0;
arr2[1] = 1;
arr2[2] = 2;
arr2[3] = 3;
int arr3[5] = {1, 2, 3, 4};
}
Run Code Online (Sandbox Code Playgroud)
当我打印每个数组的第五个位置时,我得到不同的结果:
printf("Fifth: %d\n", arr2[4]); // Prints Random number
printf("Fifth: %d\n", arr3[4]); // Prints Zero!
Run Code Online (Sandbox Code Playgroud)
输出:
Fifth: -858993460
Fifth: 0
Run Code Online (Sandbox Code Playgroud)
我知道第一个是指向内存中第五个位置的指针,第二个是数组如何用 0 初始化。我不明白为什么他们给我两个不同的值。在这两种情况下我都将数组的大小设置为 5;为什么会发生这种情况?