如果指针尚未在以下代码段中初始化,那么值2是如何存储的?
int *p;
*p = 2;
printf("%d %d\n",p,*p);
上述计划的输出如下:
0 2
我正在阅读彼得林登的“专家C编程”,并发现了这个:
float *pip = 3.141; /* Wont compile */
但是,上面的程序如何提供输出?是因为使用GCC吗?或者我错过了什么?
我理解为什么float *pip = 3.141
无效,因为地址位置必须是整数。
那么这是否意味着p存储内存地址'0'并且'2'的值被分配给该地址?为什么在这种情况下没有分段错误?
答案 0 :(得分:3)
float *pip = 3.141;
pip
是指针,指针必须用地址初始化(不带值)
e.g:
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);
答案 1 :(得分:0)
该行
float* pip = 3.141
可以改写
float* pip;
pip = 3.141;
看到区别?将其与:
进行比较int* p;
*p = 2;
在前一种情况下,您尝试将3.141指定为内存地址,而在后一种情况下,您(有效地)将2指定为值到解除引用的内存地址。