陆畏言 2024-10-20 20:33 采纳率: 0%
浏览 4

关于scanf和字符数组

为什么我在csdn里看到此类文章有的说

int main() {
    char password[20] = { 0 };
    //scanf输入时都需要传入内存地址,但是数组的名称就是内存地址第一位。
    scanf("%s", &password);//abc123


有的又不用&符号

img

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-20 20:34
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在C语言中,scanf函数用于从标准输入读取数据并存储到指定的变量或数组中。对于字符数组(字符组)的情况,使用scanf读取字符串时是否需要加'&'符号取决于数组的声明方式。当你声明一个字符数组时,数组名本身就是一个指向数组首元素的指针,因此在使用scanf读取字符串时不需要加'&'。而对于基本数据类型(如int、float等),由于其不是数组,需要使用'&'来获取其地址。

    对于你给出的两段代码示例:

    在图1中,你的注释是正确的。当你使用字符数组作为参数传递给scanf时,不需要使用'&'符号,因为数组名本身就是一个指针。因此,代码中的scanf("%s", pet);是正确的。对于基本数据类型(如int和float),需要使用'&'来获取变量的地址,所以代码中的scanf("%d %f",&age,&assets);也是正确的。

    在图2中,代码与图1相同,也是正确的。注释中的说明也是准确的。对于字符数组(如pet),不需要使用'&',所以scanf("%s", pet);是正确的。对于基本数据类型(如age和assets),需要使用'&',所以代码中的scanf("%d %f",&age,&assets);也是正确的。两段代码实际上是相同的,只是格式稍有不同而已。

    总结起来,对于字符数组(字符组),在使用scanf读取字符串时不需要使用'&',而对于基本数据类型(如int和float等),在使用scanf时需要'&'来获取变量的地址。这是因为数组名在C语言中是一个指针,而基本数据类型变量本身不是指针类型。

    评论

报告相同问题?

问题事件

  • 修改了问题 10月20日
  • 创建了问题 10月20日