有人能解释一下以下程序的输出吗?
#define SIZE 10
void size(int arr[SIZE],int i[SIZE])
{
printf("size of array is:%d %d\n",sizeof(arr),sizeof(i));
}
int main()
{
int arr[SIZE],i[SIZE];
printf("%d %d\n",sizeof(arr),sizeof(i));
size(arr,i);
return 0;
}
OUTPUT
40 40
8 8
为什么8 8? 请帮忙
答案 0 :(得分:2)
因为参数int arr[SIZE]
和int i[SIZE]
不是main
函数中的数组。它们是指针。并且指针在64位计算机上的大小通常为8。
答案 1 :(得分:2)
在main()
中,您获得了数组的大小。
当我们致电size(arr, i);
时,我们会发送arr
和i
的基地址。当我们将变量的地址传递给函数时,它会将地址存储在指针中。所以你在size()
函数中得到了指针的大小。
答案 2 :(得分:-2)
数组本身替换为指针(但它们不是指针)。所以,代码
a[i]
相当于
*(a + i)
当数组不是动态的时,sizeof运算符可以确定它的大小(在它的范围内),但是当它传递给function时它是一个指针。所以
sizeof(any_pointer) == sizeof(size_t)
由于结果,似乎你在64位处理器上工作