为什么我们在扫描 c 语言的字符串输入时不在 scanf 中指定'&'符号?



通常,当我们扫描int或float或双输入时,我们在变量之前使用'&'符号,但在string

我们在这里不需要使用&因为str ,当在表达式中使用时,衰减到指向其第一个元素的指针并且类型为 char * 。 因此,无需获取地址,因为您已经有一个"char *"。

如果您使用的是动态分配的内存:

char *str = malloc(100);
scanf("%99s", str);

您已经明确地拥有char *,因此再次无需获取地址。 如果这样做,您将获得指针变量的地址,而不是分配内存的地址。 如果你这样做,坏事就会发生。

这是因为在这种情况下,数组衰减到指针,而这个指针引用这个数组的第一个char元素。所以不需要&

char str[LEN];

scanf("%s", str)相当于scanf("%s", &str[0])

最新更新