你知道吗我会 发表于 2021-10-9 21:08:20

scanf疑惑

      scanf("%s", name);
这个后面name前面为什么不要&符号呢?

hrpzcf 发表于 2021-10-9 21:28:37

本帖最后由 hrpzcf 于 2021-10-9 21:34 编辑

#include <stdio.h>

int main(void)
{
    char name;

    // 因为name被声明为一个字符数组,name本身就代表了数组的地址,所以不用&取地址符
    scanf("%s", name);
    return 0;
}

jackz007 发表于 2021-10-9 22:35:47

       数组型变量的名称本身就是内存地址。

桃花飞舞 发表于 2021-10-10 09:02:31

&在这里是取地址符,取变量、数组、指针等的地址。char name;由于此处sanf("%s",name);中%s说明输入的是字符串,我们只是为了存储这个字符串,所以name一般是数组或指针,有地址和空间就可以了,name是数组所以数组名就是数组的地址,数组空间大小为,如果再用 &就是取数组名name的地址,&name用printf("%d %d",sizeof(name),sizeof(&name));看出char类型数组名name的大小为256*1是数组的大小而数组名取地址后的大小为4字节,这时&name的大小就是存储name的地址的大小为4个字节,可以看出&name已经为一个地址常量了,没法存储数据跟我们的目的不同了。

@littlefool 发表于 2021-10-10 09:58:23

name,已经是数组变量的名字了,数组变量的变量名默认是指向数组的第一个元素的地址,即name的地址,所以不用加&了,但如果是单独的变量肯定要加&

你知道吗我会 发表于 2021-10-17 11:16:51

hrpzcf 发表于 2021-10-9 21:28


感谢!我悟了
页: [1]
查看完整版本: scanf疑惑