【发布时间】:2019-02-03 13:38:50
【问题描述】:
通常当我们扫描 int、float 或 double 输入时,我们会在变量前使用 '&' 符号,但为什么不是在字符串的情况下
【问题讨论】:
-
因为字符串在作为函数参数传递时会衰减为指针。
-
你了解过指针吗?即使是最好的书籍也只会在
scanf上加上 & 号并说“相信我,直到以后”。
标签: c
通常当我们扫描 int、float 或 double 输入时,我们会在变量前使用 '&' 符号,但为什么不是在字符串的情况下
【问题讨论】:
scanf 上加上 & 号并说“相信我,直到以后”。
标签: c
扫描字符串时,%s 格式说明符需要char * 类型的参数。它是这样使用的:
char str[100];
scanf("%99s", str);
我们不需要在这里使用&,因为str 在表达式中使用时衰减 指向指向其第一个元素的指针并且类型为char *。所以没有必要获取地址,因为你已经有一个 `char *.
如果您使用的是动态分配的内存:
char *str = malloc(100);
scanf("%99s", str);
您已经明确拥有char *,因此无需再获取地址。如果你这样做了,你会得到指针变量的地址,而不是分配内存的地址。 Bad things will happen 如果你这样做。
【讨论】:
这是因为在这种情况下,数组衰减到指针,并且这个指针引用了这个数组的第一个 char 元素。所以不需要&
char str[LEN];
scanf("%s", str) 等价于scanf("%s", &str[0])
【讨论】: