为什么C语言程序中pointer指针未打印输出任何值?
你提到的赋值操作确实存在严重问题,除此之外代码还存在多处非法操作,具体问题如下:
- 野指针问题:你声明的
int *p没有初始化,没有指向任何合法的可写内存空间,直接对*p解引用赋值属于未定义行为,程序崩溃、输出异常、无任何响应均属于该场景下的正常表现。 - 赋值类型不匹配:
*p代表指针p指向的内存空间存储的值,类型为int;而&i是变量i的内存地址,类型为int *。你直接将指针类型赋值给整型变量,就是编译器抛出assignment makes integer from pointer without a cast警告的直接原因。
如果你希望让指针p指向变量i,正确的写法是p = &i,而非*p = &i:前者是给指针变量本身赋值地址,后者是给p指向的内存空间写入值,二者逻辑完全不同。 - 无打印输出的附加原因:你调用的
printf("%d",*p)没有添加换行符\n,标准输出stdout默认采用行缓冲策略,仅当缓冲区满、遇到换行符、程序主动调用fflush(stdout)时才会将缓冲区内容输出到屏幕,程序直接退出时缓冲未触发刷出,自然看不到打印内容。
如果你希望用指针输出循环变量i的值,修正后的代码如下:
#include <stdio.h> int main() { int *p; int i; for(i=0;i<10;i++){ p = &i; // 让指针p指向变量i的地址 printf("%d\n", *p); // 解引用p获取i的值,加换行触发缓冲输出 } return 0; }
上述代码运行后会按顺序输出0到9共10个数字,符合预期。
内容的提问来源于stack exchange,提问作者Ayush Naik
相关产品推荐
相关产品推荐

