char *name = "Я уже указатель :)";
function(name);
function(name+3); // Я указатель на 3 символа дальше, чем name
function(&name[3]); // А я не был, я был третьим символом строки, пока не взяли адрес
char name='q'; // Я символ, а не указатель
function(&name);
在表达式中,除了极少数例外,数组被隐式转换为指向其第一个元素的指针。因此,当您将数组传递给如下示例中的函数时
那么您不需要在数组名称前加上运算符
&
。该数组已转换为类型指针int *
。但是,如果您正在处理标量对象,例如
a[0]
表示数组第一个元素的表达式,即值为 0 的标量对象,如上例中的数组定义所示,那么如果您想传递其地址到上面的函数,那么你需要记下其实这两个调用
和
是等价的,因为在这两种情况下传递的都是数组第一个元素的地址。
鉴于此,这些函数声明是等价的,声明的是同一个函数。
您可以在程序中同时包含所有这些声明,程序将成功编译。
字符数组也是如此。请记住,字符串文字也有数组类型。如果有这样的电话
其中 h 是某个函数,然后将文字的第一个字符的地址传递给该函数,因为如上所述,这个文字(一个字符数组)被隐式转换为指向其第一个字符的指针。
我将以一个演示程序作为结尾,该程序还包括一个示例,显示字符串文字是数组。
将程序输出到控制台