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

使用指针逆序打印数组元素时输出异常,求问题原因及解决办法

问题分析与解决

你修改后的逆序打印循环存在数组下标越界的问题:

for (i=n;i>0;i--){
    printf("%d\n",*(p+i));
}

C语言数组的下标从0开始,当数组有n个元素时,有效下标范围是0到n-1。你循环初始值设为i=n时,p+i指向的是数组最后一个元素(a[n-1])的下一个内存位置,这个位置不属于数组的有效存储范围,访问它会触发未定义行为,输出随机的垃圾值。

修正方案

方案1:调整循环的初始值与终止条件

把循环初始值改为n-1,终止条件设为i>=0,这样就能从最后一个有效元素遍历到第一个元素:

printf("Array elements in reverse order: \n");
for (i = n - 1; i >= 0; i--) {
    printf("%d\n", *(p + i));
}

方案2:直接操作指针(更贴合指针用法)

用指针指向数组最后一个有效元素,然后向前移动指针遍历:

printf("Array elements in reverse order: \n");
int *end = p + n - 1; // 指向数组最后一个元素
while (end >= p) {
    printf("%d\n", *end);
    end--;
}

验证示例

若输入n=3,数组元素为1、2、3,修正后的代码会输出预期结果:

3
2
1

内容的提问来源于stack exchange,提问作者Pankit Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:10:27