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

C语言中使用while循环遍历int数组的异常问题及疑问

while循环遍历int数组的常见误区与正确用法

你遇到的问题根源

  • while(*rtn)的问题:这个条件判断的是当前指针指向的int元素值是否为0,而非指针是否为空。int数组里的0是正常数据,不是遍历结束的标志——所以首元素为0时直接跳过循环,中途碰到0就提前终止,完全不符合遍历整个数组的需求。
  • while(rtn)的问题:这个条件判断指针本身是否为NULL,但数组内存是连续的,指针会一直向后移动,直到访问数组外的非法内存才会报错,本质是无限制的越界访问,必然出问题。

while循环完全可以遍历int数组,只是要用对条件

和for循环一样,while循环需要明确的遍历边界,常见的两种正确写法:

写法1:用计数器+数组长度控制

int arr[] = {0, 1, 2, 3, 0};
int len = sizeof(arr) / sizeof(arr[0]); // 计算数组元素个数
int *rtn = arr;
int count = 0;

while (count < len) {
    printf("%d ", rtn[count]); // 或*(rtn + count)
    count++;
}

写法2:用指针与尾指针比较

int arr[] = {0, 1, 2, 3, 0};
int *rtn = arr;
int *end_ptr = arr + sizeof(arr) / sizeof(arr[0]); // 指向数组末尾的下一个位置

while (rtn < end_ptr) {
    printf("%d ", *rtn);
    rtn++;
}

补充:别把int数组和字符串搞混

字符串是特殊的char数组,C语言约定用'\0'(ASCII值为0的字符)作为结束标志,所以while(*str)能正常遍历字符串。但int数组没有这种默认的结束约定,不能用元素值是否为0来判断遍历终点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:32:10