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

C语言中不用指针无法打印数组吗?下述代码是否存在错误?

问题分析与修复说明

根本原因

  • 第一个while循环执行完成后,计数器变量i已经经过3次自增,值为3。
  • 第二个while循环的判断条件为i < 3,此时3 < 3不成立,循环体完全不会执行,因此没有任何打印输出。
  • 除了未重置计数器的问题外,你的代码其余逻辑(指针访问数组、数组下标偏移访问)都是正确的,不存在其他语法或逻辑错误。

修复方法

只需要在进入第二个while循环前,将i重置为0即可,修改后的完整代码如下:

#include<stdio.h>
#include<stdlib.h>
int main(){
   
    int arr[]={10,20,30};
    int *ptr=arr;
    int i=0;
    //Printing Array with Pointer
    while(i<3)
    {
        printf("%d\n",*ptr);
        ptr++;
        i++;
    }
    //Printing Array without Pointer
    printf("\n\n");
    i = 0; // 新增:重置计数器i
    while(i<3)
    {
        printf("%d\n",*(arr+i));
        i++;
    }

    return 0;
}

修改后运行程序,会先输出一遍数组元素,换行两次后再输出一遍数组元素,符合预期。

额外补充说明

第一个循环中你对ptr做了自增操作,执行完循环后ptr已经指向了数组arr末尾之外的内存地址,如果你后续还需要用ptr访问数组元素,需要额外加一行ptr = arr;将指针重置到数组首地址;本案例中第二个循环没有用到ptr,因此不需要调整指针。

内容的提问来源于stack exchange,提问作者Darshika Jadhav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:36:00