[英]If arrays are always passed call by reference then how can arrays be passed to functions like printf which are strictly call by value?
c中的数组总是通过引用传递,而printf是通过值函数调用,那么为什么我们将数组传递给printf函数以打印字符串?
首先, 数组不会在C中通过引用传递 。 它们衰减到一个指针,该指针按值传递给函数。
在C语言中没有按引用传递 。只能通过按值传递来模拟。
我们并没有真正将数组传递给printf
:这是我们通过隐式转换(衰减)获得的上述指针。 也可以取消引用此指针以访问数组的内容,因此根本不需要“按值”传递数组。
您不将数组传递给printf,而是将值传递给数组。
int arr[] = {1,2,3};
printf("%d",arr); //Undefined behavior(garbage value)
printf("%d",arr[0]); //will print 1
您也可以将指针作为函数的参数传递,但不能传递给C语言中的引用。
编辑
如果char*
是char的指针,则可以显示数组中的所有字符,直到使用NULL字符到达为止
char* str = "Hello";
printf("%s",str);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.