c - 一个应该接受字符数组作为输入的函数如何接受传递给它的数组第一个元素的内存地址?
问题描述
我正在学习如何将数组传递给函数,当这本书(C for dummies)说当你将数组传递给函数时,数组的第一个元素的地址就是传递给函数的地址,我对此感到困惑。
我知道一个像这样的数组char name[]
如果传递给它就不能保存内存地址,所以我想知道为什么say(char name[])
下面的函数可以保存传递给它的数组第一个元素的内存地址。
#include <stdio.h>
void say(char name[])
{
printf("Welcome %s",name);
}
int main()
{
char h[] = "Kyle";
say(h);
return(0);
}
解决方案
在 C 中,数组基本上是内存中的一些连续变量。如果我的数组是int tab[4]
,我的内存将包含每个元素(int
在此示例中为类型),一个接一个。该变量tab
确实可以作为指向其第一个元素的指针。
当你写tab[2]
的时候,编译器和你写的完全一样tab + 2
。
在您的示例中,char name[]
表示该函数需要一个数组。char h[]
创建一个名为的数组h
并使用正确的大小对其进行初始化以包含“Kyle”(以及该字符的另一个\0
字符)。当您h
作为参数传递时say()
,第一个元素的地址将发送到您的函数,这就是它可以毫无问题地访问它的原因。