数组传递给c中的函数时传递的是什么?数组值或参考地址的副本?
What is passed when an array is passed to a function in c? Copy of array values or reference addresses?
我想知道在将数组传递给 c 中的函数时。是通过数组值的副本还是通过数组地址(引用)?
Is it the copy of array values that get passes or the array address(reference) that gets passed?
从技术上讲,两者都不是。在 C 函数中,参数总是按值传递。在数组(变量)的情况下,当作为函数参数传递时,它会衰减到指向数组第一个元素的指针。然后像往常一样按值传递指针。
但是,就像任何其他指针类型参数一样,如果从被调用函数更改指针指向的任何值(或者,通过指针算法派生的指针,只要您保持在有效范围内) ,调用函数内部的实际数组元素值也会受到影响。
当数组作为参数传递给函数时,它会隐式衰减为尖头,例如
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);
}
它衰减为指针的原因是时间。将数组中的所有元素复制到调用函数参数的成本更高。所以它隐含地衰减为指针。
我想知道在将数组传递给 c 中的函数时。是通过数组值的副本还是通过数组地址(引用)?
Is it the copy of array values that get passes or the array address(reference) that gets passed?
从技术上讲,两者都不是。在 C 函数中,参数总是按值传递。在数组(变量)的情况下,当作为函数参数传递时,它会衰减到指向数组第一个元素的指针。然后像往常一样按值传递指针。
但是,就像任何其他指针类型参数一样,如果从被调用函数更改指针指向的任何值(或者,通过指针算法派生的指针,只要您保持在有效范围内) ,调用函数内部的实际数组元素值也会受到影响。
当数组作为参数传递给函数时,它会隐式衰减为尖头,例如
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);
}
它衰减为指针的原因是时间。将数组中的所有元素复制到调用函数参数的成本更高。所以它隐含地衰减为指针。