我试图在函数内部(main()函数之外)找到数组中的元素数。该过程的一部分是以字节为单位查找数组的大小,但是当我将数组的大小传递给函数后,它比应该的数量少4个字节。
这是我的代码的精简版本,它打印出main函数中数组的大小,然后打印出已传递给函数的数组的大小。这些尺寸应该相同,但情况并非如此。
#include <stdio.h>
int main()
{
// Initialize variables
int numbers[3];
// Request user to input an integer 3 times
int i ;
for(i = 0; i < 3; i++)
{
printf("Please enter an integer: ");
scanf("%d", &numbers[i]);
}
// Print size of array outside of function
printf("Size of numbers: %d\n",sizeof(numbers)); // Prints "12"
// Get size of array in function
printf("Size of n: %d\n", debug(numbers)); // Prints "8"
// End main loop function
return 0;
}
int debug(int n[])
{
// Return the size of the array inside the function
return(sizeof(n));
}
此代码输出:
Size of numbers: 12
Size of n: 8
知道可能导致此问题的原因是什么?它总是报告比应该少4个字节。
答案 0 :(得分:2)
你不能真正地将数组传递给(或从它们返回)函数,它们会降级为指向第一个元素的指针。您的第二个sizeof
实际上是sizeof int*
,而不是sizeof int[3]
答案 1 :(得分:2)
函数8
中的debug
是数组开头的64位地址中的字节数。数组通过其地址传递给函数。 C不携带数组的大小及其地址。这必须单独传递。