C语言使用指针填充数组时循环运行异常问题求助
问题根因分析
- 误用
sizeof运算符:sizeof x返回的是数组占用的总字节数,若int类型占4字节,7个元素的数组总字节数为28。*ip从2开始每次乘2,到32时就会大于28,触发循环终止条件,因此循环最多执行4次(对应值2、4、8、16),这就是只能看到4个输出的核心原因。 - 指针未移动,仅操作首元素:代码中
ip始终指向x[0],所有*ip赋值操作都只会修改x[0]的值,完全没有对数组下标1到6的元素做任何赋值。 - 循环索引
i未更新:for循环中仅初始化了i=0,全程没有对i做自增操作,每次printf输出的都是x[0],不会访问数组的其他位置。 - 初始化语法不标准:
int x[7] = {}是空初始化列表,属于C++语法,标准C中不支持该写法,部分编译器扩展支持但存在兼容性风险。
修正代码
要生成7个元素,每个元素是前一个的2倍,调整逻辑为遍历所有数组位置,同步移动指针赋值,修正后代码如下:
#include <stdio.h> int main() { int x[7] = {0}; int *ip = x; *ip = 2; for(int i = 0; i < 7; i++) { printf("value of x[%d]: %d\n", i, *ip); if (i < 6) { ip++; *ip = *(ip - 1) * 2; } } return 0; }
运行后输出序列为2、4、8、16、32、64、128,符合预期。
内容的提问来源于stack exchange,提问作者Geri Bakushi
相关产品推荐
相关产品推荐

