由于在以下代码片段中尚未初始化指针,因此如何存储值 2?
int *p;
*p = 2;
printf("%d %d\n",p,*p);
上述程序的输出如下:
0 2
我正在阅读 Peter Linden 的“Expert C Programming”,发现了这个:
float *pip = 3.141; /* Wont compile */
但是上面的程序是如何给出输出的呢?是因为使用 GCC 吗?还是我错过了什么?
编辑
我理解为什么 float *pip = 3.141
无效,因为地址位置必须是整数。
那么这是否意味着 p 存储了内存地址“0”并且“2”的值被分配给了这个地址?为什么在这种情况下没有段错误?
最佳答案
float *pip = 3.141;
pip
是指针,指针必须用地址初始化(不是用值)
例如:
float f[] = {0.1f, 0.2f, 3.14f};
float *pip = &f[2];
printf("%f\n", *pip);
编辑:
另一个:
int *p = malloc(sizeof(int)); /* allocates space */
*p = 2; /* Now you can use it */
printf("%p %d\n", (void *)p, *p);
free(p);
关于c - 取消初始化整数指针的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892145/