当我们在C语言编程中一个一个地输出数组的元素时,最常用的实现就是使用for循环,很简单。例如,类似于以下的 C 程序代码片段:
for(i = 0; i< length; i++) { printf(“数组元素是%d”, 数组[i]); }
使用下标索引变量 i 遍历整个 C 程序数组数组名,length 是数组的长度。当然,长度必须提前计算。计算的方法有很多种,很多朋友都会想到用sizeof来计算。不过sizeof也不错,但要睁大眼睛小心误用。如果您不相信,请继续阅读。
让我们先看看传统的方法。C程序代码如下:
#include "stdio.h" int main(void) { int number[5] = {1,2,3,4,5}; int index = 0; printf("数组的元素分别是:\n"); for(index = 0;index < 5; index++) { printf("%d ", number[index]); } printf("\n"); return 0; }
最简单的方法就是把C语言数组的长度写死,然后用循环一个一个的输出。该过程清晰易懂,结果是:
结果也清晰易懂。
有的朋友会心血来潮,何乐而不为:
#include "stdio.h" int main(void) { int number[5] = {1,2,3,4,5}; int index = 0; int *p = &number[0]; printf("数组的长度是: %d\n", sizeof(p)); printf("数组的元素分别是:\n"); for(index = 0;index < sizeof(p); index++) { printf("%d ", number[index]); } printf("\n"); return 0; }
加上AC语言指针变量p,指针变量p的初值为数组第一个元素的地址。有的朋友尝试用sizeof(p)来获取数组的长度,是错误的,请看结果:
从结果可以看出,sizeof(p)实际上是计算指针变量p的大小。在 32 位系统上数组名,无论指针 p 指向整数数据、字符数据、短数据、长数据等,指针 p 本身占用的内存字节数都是 4。即使用大小4字节来存储变量p的值。
我也看到一些朋友这样使用sizeof。C程序代码如下:
#include "stdio.h" void print(int number[5]) { int index = 0; ; printf("函数print中,数组长度是: %d ", sizeof(number)); printf("函数中数组的元素分别是:\n"); for(index = 0; index < sizeof(number) / sizeof(number[0]); index++) { printf("%d ", number[index]); } printf("\n"); } int main(void) { int number[5] = {1,2,3,4,5}; print(number); return 0; }
这次再次修改C程序代码,将数组名编号传递给函数print,print函数的形参看起来像一个数组。运行的结果是
诺诺,运行结果不是预期的结果。其实C语言函数print的形参看起来像一个数组,所以有的朋友认为是数组,所以使用sizeof来计算数组的长度;实际情况是print函数的参数还是指针,指针,A指针,没错,是C语言指针,所以sizeof(number)还是计算指针的大小。初学者一定要记住!