You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:12:04