当一个数组作为参数传递时,编译器生成一个指向数组第一个元素的指针,并将该指针传递给函数而不是整个数组,所以我的问题是为什么我们可以打印数组的值我们打印 array[i]
?
void FunctionApi(int array[])
{
int i;
for(i=0;i<8;i++)
{
printf("Value =%d\n",array[i]);
//I understand the reason behind the following two lines but not the above line.
//printf("noOfElementsInArray=%d\n",*array);
//*array++;
}
}
int main()
{
int array[8]={2,8,10,1,0,1,5,3};
int noOfElementsInArray;
noOfElementsInArray=sizeof(array)/sizeof(int);
printf("noOfElementsInArray=%d\n",noOfElementsInArray);
FunctionApi(array);
return 0;
}
最佳答案
数组的元素一起存储在连续的位置。这就是为什么知道初始元素的地址就足以知道其余元素的位置。
唯一的诀窍是知道数组有多少个元素。这不与数组一起传递,因此您需要单独传递它。这对您的程序来说不是问题,因为您将它硬编码为 8,但通常如果您将数组作为参数传递,您还需要将其大小作为单独的参数传递:
void FunctionApi(int array[], size_t count) {
int i;
for(i=0;i<count;i++) {
printf("Value =%d\n",array[i]);
}
}
就 noOfElementsInArray=sizeof(array)/sizeof(int);
计算而言,这个技巧仅在调用者中有效,其中 array
是一个数组,不是指向数组初始元素的指针。在这个位置,编译器知道数组的大小是 int
大小的八倍,因此除以 sizeof(int)
可以得到元素的数量数组。
关于c - 数组作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844028/