C语言是否支持不遍历元素直接打印完整数组(含二维数组行)
C语言打印数组问题解答
现有代码错误原因
你代码中的Numbers[i]是二维数组对应行的首地址,属于int*指针类型,使用%i格式符输出时只会打印该内存地址的十进制整数值,和数组存储的元素值无关,因此会得到你看到的异常负数输出。
核心需求实现说明
C标准库没有内置无需遍历就直接打印完整数组的函数,所有打印数组内容的实现底层本质都需要遍历每个元素,但你可以通过封装打印函数的方式简化上层调用逻辑,不需要每次使用时手动写遍历代码。
可行实现示例
针对你需要的输出格式,可以封装如下打印函数:
#include <stdio.h> // 打印int类型一维数组的封装函数 void print_int_arr(int *arr, int len) { printf("{"); for (int i = 0; i < len; i++) { if (i > 0) printf(", "); printf("%d", arr[i]); } printf("}\n"); } int main() { int Numbers[4][4] = {{5, 1, 1, 6}, {2, 2}, {3, 3, 3}, {4, 4, 4}}; // 上层调用仅需要一行,无需重复写遍历逻辑 print_int_arr(Numbers[0], 4); print_int_arr(Numbers[1], 2); print_int_arr(Numbers[2], 3); print_int_arr(Numbers[3], 3); return 0; }
上述代码运行后即可输出你期望的结果:
{5, 1, 1, 6} {2, 2} {3, 3, 3} {4, 4, 4}
如果是元素长度统一的数组,还可以进一步简化上层调用,比如全是4元素的数组可以直接在循环里调用:
for (int i = 0; i < 4; i++) { print_int_arr(Numbers[i], 4); }
(注意该写法会把初始化时未赋值的元素打印为默认的0值)
内容的提问来源于stack exchange,提问作者Mahmoud Gabr
相关产品推荐
相关产品推荐

