如果数组总是通过引用传递,那么如何将数组传递给像printf这样严格按值调用的函数?

时间:2016-04-04 12:58:51

标签: c arrays pointers

c中的数组总是通过引用传递,printf是一个值函数调用,那么为什么我们将数组传递给printf函数来打印一个字符串呢?

2 个答案:

答案 0 :(得分:5)

首先,数组不会通过C 中的引用传递。它们衰减指向一个指针,该指针通过按值传递给函数。
在C中没有按引用传递。它只能通过传递值进行模拟。

我们并没有真正地将数组传递给printf:它是我们通过隐式转换(衰变)获得的上述指针。这个指针也可以被解除引用以访问数组的内容,因此传递一个数组" by value"根本不需要。

答案 1 :(得分:0)

您不会将数组传递给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);