c - 取消初始化整数指针的赋值

标签 c pointers declaration ansi definition

由于在以下代码片段中尚未初始化指针,因此如何存储值 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/

相关文章:

javascript - 在 Javascript 中重新分配对象变量时,原始对象会发生什么变化?

c - 在c中printf()返回什么

c - 在c中初始化二维数组时出现段错误

c++ - 检查 char * 类型的字符串是否包含另一个字符串

c - 如何在C中使用浮点指针访问 double 值

c++ - 类声明大括号后的分号

java - 声明一个变量但不初始化它会提高性能吗?

c - 使用 fgets() 和 strtok() 在 C 中逐行读取文件?

c - posix在线程中创建共享内存

c - C中表达式的解析规则是什么?