在下面的代码片段中,由于指针没有初始化,值2是如何存储的?
int *p;
*p = 2;
printf("%d %d\n",p,*p);
上述程序的输出如下:
0 2
我正在阅读Peter林登的《C语言编程Maven》,发现了这个:
float *pip = 3.141; /* Wont compile */
但是上面的程序是如何给出输出的呢?是因为使用了GCC吗?还是我遗漏了什么?
编辑
我理解为什么float *pip = 3.141
是无效的,因为地址位置必须是整数。那么这是否意味着p存储内存地址'0',并且'2'的值被分配给这个地址?为什么在这种情况下没有分段错误?
2条答案
按热度按时间wpcxdonn1#
pip
是一个指针,指针必须用地址初始化(而不是值)例如:
编辑:
另一个:
ozxc1zmp2#
这条线
可以被重写
看到区别了吗?比较一下:
在前一种情况下,您试图将3.141分配为 * 内存地址 *,而在后一种情况下,您(有效地)将2作为 * 值 * 分配给 * 解引用 * 内存地址。