为什么这段C语言代码仅输出1而非数组全部元素?
代码无法输出全部数组元素的原因
核心问题出在你定义的指针类型和指针运算的步长不匹配:
int (*pointer)[5]是指向长度为5的int数组的指针,它的步长为5 * sizeof(int),如果int占4字节,每次指针自增会偏移20字节,会直接跳过整个数组的范围。- 你写的
*pointer++受运算符优先级影响,等价于*(pointer++),会先偏移pointer本身的地址,第一次循环结束后,pointer已经指向数组末尾之外的非法地址,自然不满足*pointer <= array + 4的循环条件,所以只会打印第一个元素1就退出循环。 - 另外for循环第一个分句的
*pointer没有任何实际作用,不会修改任何变量值,属于无效写法。
修正方案
方案1:保留指向数组的指针,通过下标访问元素
#include <stdio.h> int main() { int array[5] = {1,2,3,4,5}, (*pointer)[5] = &array; for(int i = 0; i < 5; i++) { printf("%d ", (*pointer)[i]); } return 0; }
方案2:改用普通int指针遍历,更符合常规写法
#include <stdio.h> int main() { int array[5] = {1,2,3,4,5}, *pointer = array; for(; pointer <= array + 4; pointer++) { printf("%d ", *pointer); } return 0; }
内容的提问来源于stack exchange,提问作者Shreyash Wankhede
相关产品推荐
相关产品推荐

