c/c++开发分享为什么我们不在scanf中使用’&’来表示char arrray

int age; char name[10]; scanf("%d", &age); scanf("%s", name); 

在第一个scanf函数中,我们在age之前使用'&'符号,但在第二个scanf我们不使用'&'因为它是char数组。 谁能告诉我为什么会这样?

    在大多数情况下,类型为“N元素数组T ”的表达式将转换为(“衰减”)以键入“指向T指针”,表达式的值将是数组中第一个元素的地址。

    当你写作

     scanf("%s", name); 

    表达式name类型为“10-element array of char ”; 根据上面的规则,它被转换为“指向char指针”,其值与&name[0] 。 因此scanf接收指针值,而不是数组值。

    此规则的例外情况是数组表达式是sizeof_Alignof或一元&运算符的操作数,或者是用于初始化声明中的另一个数组的字符串文字。

    请注意,表达式name&name将为您提供相同的 (数组的第一个元素的地址与数组的地址相同),但它们的类型将不同; name将具有char *类型,而&name将具有char(*)[10]类型或“指向10元素char数组”。

    因为数组已作为地址传递,而整数变量不是(因此明确需要通过& address-of运算符传递的地址)。

    数组名称本身引用该内存中该数组的开头。 在这种情况下:

     name == &name[0] 

    数组名称已经是指针,在这种情况下它指向char的内存位置。 如果使用'&' ,它将是一个指向数组的指针,并且类型为char(*)[10] 。 但有利的论点必须是char *类型。 在这种情况下, name的类型为char * ,而不是age类型为int

      以上就是c/c++开发分享为什么我们不在scanf中使用’&’来表示char arrray相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545995.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注