3

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

4

2 回答 2

3
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);
于 2013-07-26T22:51:33.820 回答
0

线

float* pip = 3.141

可以改写

float* pip;
pip = 3.141;

看到不同?将其与以下内容进行比较:

int* p;
*p = 2;

在前一种情况下,您尝试将 3.141 分配为内存地址,而在后一种情况下,您(有效地)将 2 作为分配给取消引用的内存地址。

于 2013-07-26T22:47:24.543 回答