c中的数组总是通过引用传递,printf是一个值函数调用,那么为什么我们将数组传递给printf函数来打印一个字符串呢?
答案 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);