C语言中int变量需用&运算符而数组无需的原因
关于C语言scanf中&运算符的疑问解答
首先把你给出的代码格式化如下:
#include <stdio.h> #include <stdlib.h> int main(){ char name[100]; int age; printf("Enter you name:\n"); scanf("%s", name); printf("Enter you age:\n"); scanf("%d", &age); printf("You are %s,\nYour age is %d", name, age); return 0; }
咱们直接说核心逻辑:scanf的作用是把用户输入的数据写到变量里,但它必须拿到变量在内存中的地址才能完成写入——就像寄快递得知道收件地址才行。
对于
int age这种普通变量:
直接写age时,传给函数的是这个变量当前存储的值,不是它的内存地址。所以必须用&(取地址运算符)获取age的内存地址,也就是&age,这样scanf才能找到要写入数据的位置,把用户输入的整数存进去。对于数组
char name[100]:
在C语言里,数组名是个特殊的标识符——当你直接使用name时,它会自动转换成指向数组第一个元素的指针,等价于&name[0](数组首元素的地址)。所以直接把name传给scanf,就等于给了它数组首元素的地址,scanf可以从这个地址开始,把输入的字符串逐个字符存到数组里,直到遇到空格或换行符为止。
补充个小细节:如果要给数组里的单个元素赋值,比如name[5],那还是得用&,比如scanf("%c", &name[5]);——因为单个元素和普通变量一样,直接写传递的是值,不是地址。
内容的提问来源于stack exchange,提问作者cha
相关产品推荐
相关产品推荐

