我将一个包含4个元素的int
数组传递给一个函数,sizeof(array)/sizeof(array[0])
表示我的元素较少。
以下是正在发生的事情的例子:
int
main() {
// declaring literal array
int array[] = {1,2,3,5};
// prints 16/4 (correct output for 4 elements)
printf("%d/%d\n", sizeof(array), sizeof(array[0]));
function(array);
return 0;
}
void
function(int array[]) {
// printing 8/4 instead of 16/4
printf("%d/%d\n", sizeof(array), sizeof(array[0]));
}
答案 0 :(得分:4)
这里的问题是数组的函数参数被编译器转换为指针。所以就好像你的函数有签名
void function(int *array);
这意味着两件事:
sizeof(array)
只会告诉您架构中指针的大小。因此,根据您的输出,我们可以告诉您正在编译64位目标,但没有别的。请注意sizeof(array[0])
等同于sizeof(*array)
(指针算术),因此无论如何它仍将提供正确的值。
答案 1 :(得分:1)
函数内部的sizeof返回指向数组的sizeof指针,取决于你的系统,它可以是4或8。
答案 2 :(得分:1)
当您将数组作为I / P参数传递给函数时,它被视为包含其基址的指针。
你得到:sizeof(指针)/ sizeof(数组的第一个元素)
在GDB中:(在函数()内部
(gdb) pt matrix_transposition_key
type = int *
(gdb) pt matrix_transposition_key[0]
type = int
(gdb) p sizeof(matrix_transposition_key)
$2 = 8
(gdb) p sizeof(matrix_transposition_key[0])
$3 = 4