我想知道将数组传递给c中的函数。它是获取传递的数组值的副本还是传递的数组地址(引用)?
答案 0 :(得分:1)
当一个数组作为参数传递给函数时,它隐含地衰减为例如
的指针char * foo(char buffer[])
{
printf("sizeof buff= %d",buffer); // here you will get pointer size not original buf because buffer is decay to pointer as char *buffer
}
int main()
{
char buf[10]="hello";
foo(buf);
}
它衰减到指针的原因是时间。将数组中的所有元素复制到调用函数参数的成本更高。所以隐含地它会衰减到指针。
答案 1 :(得分:0)
它是获取传递的数组值的副本还是传递的数组地址(引用)?
技术上,既不。在C函数中,参数始终按值传递。在数组(变量)的情况下,当作为函数参数传递时,它衰减到指向数组的第一个元素的指针。然后像往常一样按指针传递指针。
然而,正如任何其他指针类型参数一样,如果从被调用函数中改变指针指向的任何值(或者,通过指针算法导出指针,只要保持在有效范围内),调用函数内部的实际数组元素值也会受到影响。