我已经了解到,当我们将数组名称传递给sizeof时,数组的名称不会衰减到指向基址的指针。下面的代码通过给出答案10来验证这一事实。
#include <stdio.h>
int main(){
int arr[10];
printf("Size of array is %d" , sizeof(arr)/sizeof(int));
return 0;
}
然而,当我运行下面的代码时,答案是1.无论维度是否写入原型,答案都是1.为什么会这样?
#include <stdio.h>
void dimension(int arr[]){
printf("Sizof array is %d" , sizeof(arr)/sizeof(int));
}
int main(){
int arr[10];
dimension(arr);
return 0;
}
答案 0 :(得分:5)
答案 1 :(得分:4)
因为您传递的是未知大小的数组,该数组相当于此上下文中的指针。 sizeof
是在编译时计算的,而非运行时。
答案 2 :(得分:2)
当数组传递给函数时,它作为指针而不是数组传递,因此sizeof(arr)
将返回sizeof(int *)
答案 3 :(得分:1)
作为函数参数的数组执行衰减到指针。由于这是在调用sizeof()之前发生的,因此无法阻止它。
试想一下:如果可以传递任何大小的数组且没有额外的信息,那么sizeof()如何知道数组的大小?你得到sizeof(指针),在你的设置中看起来与int的大小相同。
答案 4 :(得分:1)
在
void dimension(int arr[]){
printf("Sizof array is %d" , sizeof(arr)/sizeof(int));
}
arr[]
衰减到一个指针,因此你有相当于
printf("Sizof array is %d" , sizeof(int*)/sizeof(int));
因为在您的平台上sizeof(int*) == sizeof(int)
,您会收到1
作为结果。
但请注意,对于可变长度数组,sizeof
成为运行时操作:
int main () {
int i = ...;
int x[i];
printf("number of elements: %d", sizeof (x) / size(*x));
}
答案 5 :(得分:0)
因为arr是一个指针,它是一个整数。
答案 6 :(得分:0)
返回指针的大小,即整数。
答案 7 :(得分:0)
因为您传递的是未知大小的数组。