分配以取消初始化整数指针

时间:2013-07-26 22:41:42

标签: c pointers declaration ansi definition

如果指针尚未在以下代码段中初始化,那么值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'的值被分配给该地址?为什么在这种情况下没有分段错误?

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指定为解除引用的内存地址。