将数组传递给c中的函数时传递的是什么?数组值或引用地址的副本?

时间:2017-09-19 09:42:06

标签: c arrays parameter-passing function-call

我想知道将数组传递给c中的函数。它是获取传递的数组值的副本还是传递的数组地址(引用)?

2 个答案:

答案 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函数中,参数始终按值传递。在数组(变量)的情况下,当作为函数参数传递时,它衰减到指向数组的第一个元素的指针。然后像往常一样按指针传递指针。

然而,正如任何其他指针类型参数一样,如果从被调用函数中改变指针指向的任何值(或者,通过指针算法导出指针,只要保持在有效范围内),调用函数内部的实际数组元素值也会受到影响。