You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:06:02