繁体   English   中英

如果始终通过引用调用传递数组,那么如何将数组传递给严格按值调用的函数如printf?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM