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
相关产品推荐
相关产品推荐

