当数组名作为函数的参数时,该函数的形参只为指针。
1 #include <stdio.h>
2
3 void pprintf1(int ptr[])
4 {
5 int len1 = sizeof(ptr);
6 int len2 = sizeof(ptr[0]);
7 printf("len1 = %d, len2 = %d\n", len1, len2);
8 }
9
10 int main(void)
11 {
12 int num[] = {1, -1, 2, -2, 3, -3, 4, -4, -8, 8};
13 int len = sizeof(num) / sizeof(num[0]);
14 pprintf1(num);
15 return 0;
16 }
结果:len1 = 8, len2 = 4(基于64位系统)
分析:
① pprintf1函数的形参ptr[]不是数组,不管形参是int ptr[100]、int ptr[]、int *ptr,如果它们传入的实参都为数组的话,那么编译器都会将形参当作int *来处理。
② 因为形参ptr[]是指针,所以sizeof(ptr)计算的是指针的字节大小而不是数组num的总大小40,64为系统的话sizeof(ptr)大小为8,sizeof(ptr[0])是元素的大小,因为数组num[]里面每个元素都是int类型,所以int的大小为4。