-1
int age;
char name[10];

scanf("%d", &age);
scanf("%s", name);

在第一个scanf函数中,我们'&'在年龄之前使用符号,但在第二个函数中,scanf我们不使用'&' 它,因为它是一个 char 数组。谁能告诉我为什么会这样?

4

3 回答 3

5

因为数组已经作为地址传递,而整数变量不是(因此明确需要通过&address-of 运算符传递其地址)。

于 2012-10-04T06:04:11.143 回答
4

数组名本身引用内存中该数组的开头。在这种情况下:

name == &name[0]
于 2012-10-04T06:39:42.843 回答
2

在大多数情况下,“N-element array of T”类型的表达式将被转换为(“decay”)类型“pointer to T”,表达式的值将是数组中第一个元素的地址。

当你写

scanf("%s", name);

表达式name的类型为“10 元素数组char”;通过上面的规则,它被转换为类型“指针char”,它的值与&name[0]. 所以scanf接收一个指针值,而不是一个数组值。

此规则的例外情况是数组表达式是 、 或一元运算符的操作数sizeof_Alignof或者&是用于在声明中初始化另一个数组的字符串文字。

请注意,表达式name&name会给你相同的(数组的第一个元素的地址与数组的地址相同),但它们的类型会不同;name将有 type char *,而&name将有 type char(*)[10],或“指向 10 元素数组的指针char”。

于 2012-10-04T11:43:14.227 回答