回答:
printArray函数中的arr并不等同于main函数中的array,array是数组而arr是指针;
不管arr怎样写(int * arr或者int arr[]),arr都是个指针,arr负责接收array数组首元素的地址;
当用sizeof(arr)计算arr所占字节数的时候,sizeof计算的不是arr指向的数组所占的字节数,而是计算arr指针自身所占字节数;
在64位环境下,指针占8个字节,int占4个字节,所以sizeof(arr) / sizeof(int) = 8 / 4 = 2;
说道这里就不难看出,程序的输出结果一定只是数组array前两个元素的值。
解决办法就是在调用函数printArray时,直接把在main函数中计算出的数组长度传递进去。
- #include <stdio.h>
- void printArray(int arr[], int len) // arr接收array数组首元素的地址,len接收array数组的长度
- {
- // 在printArray函数中arr是指针,指针占8个字节
- printf("在printArray函数中指针arr所占字节数(sizeof(arr)) = %lu\n", sizeof(arr));
- printf("错误的计算结果:sizeof(arr) / sizeof(int) = %lu / %lu = %lu\n", sizeof(arr), sizeof(int), sizeof(arr) / sizeof(int));
- for (int i = 0; i < len; i++) {
- printf(" %d ", arr[i]);
- }
- printf("\n");
- }
- int main(void)
- {
- int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
- // 在main函数中,数组array所占的字节数为40
- printf("在main函数中数组array所占字节数(sizeof(array)) = %lu\n", sizeof(array));
- printf("sizeof(array) / sizeof(int) = %lu / %lu = %lu\n", sizeof(array), sizeof(int), sizeof(array) / sizeof(int));
- printArray(array, sizeof(array) / sizeof(int)); // 将array数组的地址以及长度都传递给printArray函数
- return 0;
- }
复制代码
|