【问题标题】:Why do we not specify '&' symbol in scanf while scanning a string input in c language? [duplicate]为什么我们在扫描c语言输入的字符串时不在scanf中指定'&'符号? [复制]
【发布时间】:2019-02-03 13:38:50
【问题描述】:

通常当我们扫描 int、float 或 double 输入时,我们会在变量前使用 '&' 符号,但为什么不是在字符串的情况下

【问题讨论】:

标签: c


【解决方案1】:

扫描字符串时,%s 格式说明符需要char * 类型的参数。它是这样使用的:

char str[100];
scanf("%99s", str);

我们不需要在这里使用&,因为str 在表达式中使用时衰减 指向指向其第一个元素的指针并且类型为char *。所以没有必要获取地址,因为你已经有一个 `char *.

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

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

您已经明确拥有char *,因此无需再获取地址。如果你这样做了,你会得到指针变量的地址,而不是分配内存的地址。 Bad things will happen 如果你这样做。

【讨论】:

    【解决方案2】:

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

    char str[LEN];
    

    scanf("%s", str) 等价于scanf("%s", &str[0])

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 2015-12-15
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多