C语言基础问题

int a;
scanf("%d",&a);
我们老师讲,&是取地址符,但是我就奇怪,为什么叫取地址?
我们明明是想知道a是多少,而不是说它在哪,地址不是形容一个事物在哪吗?我输个10,a就是10了。

你scanf("%d",&a),是从键盘获取一个字符,但是取得这个字符后,你得找个地方把他存起来吧,所以叫取地址,&a就是为a取了一个地址。

你先定义了一个a,他在某个房间里(地址),你要给a送一个汉堡(赋值),你要先知道他在哪个房间(取地址),整个过程就是这样

简单的说,a去取值是从它所在的地址去取值的。如果地址里放的是什么,a取出来就是什么。这里输入的时候把它放地址里,那a取的时候就是输入的值。

可以说是说在计算机上需要一个空间来存放你输入的数,计算机总要知道数在哪一个空间不是

首先int a;这个语句申明了一个名字为a的变量,然后计算机会自动为他找一个地方来存放
再就是scanf("%d",&a);这一句,你是要通过输入来修改a的值,那么你就要告诉计算机变量a的相关信息,比如存放的地址
a代表的是它本身的值,而&a代表的是a的存放地址。希望对你有所帮助...

就像发email,你总要有个邮箱地址,只有邮件内容是没有意义的
向内存中写一个数据也一样,一定要知道这个内存是哪个存储单元,地址就是用来标示你写的数据放到内存的哪个存储单元

你如果学过微机原理,你就会更明白,&a是一个地址值,在存储空间里,每个存储单元都有个地址,你输入一个数字或字符,代表这个数字或字符的二进制编码将被输入到存储单元中,你给了&a这个地址,计算机就知道把数字或字符放到哪了

这与scanf()函数的参数有关

额,这个地址指的是内存地址。比如说你住宿舍名字叫秋实4029,这个宿舍的地址就是**省**市**区**大道**大学***。

因为计算机是靠内存单元来存储数据,是线性排列的,所以是有地址的,只有知道地址,你才能找到这个数据,就像你去一个人的家里找谁,你必须要知道地址吧,恩,就是这样,冯诺依曼体系结构决定的,如果你可以发明另一种计算机,那也没准

这个后面会慢慢理解的,int a,表示声明了一个整形的变量,计算机就给它分配了一块空间,现在呢还不知道里面的内容是多少,但是我现在要要放一个10进去,
那我怎么放进去呢,所以就需要知道a的实际的物理地址是多少才能找的到,就像我们现在的门牌号,宿舍号之类的。

因为变量a的地址是自动分配的,可以这么理解,变量a的值是未知的,地址也是未知的,知道了地址后方便后面写入

&a,是说a的地址,就是告诉计算机,要把输入的数放在哪里,可以理解为门牌号。
规则,用习惯就好。

函数名: scanf
功 能: 执行格式化输入
用 法: int scanf(char *format[,argument,...]);
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
其调用格式为: scanf("<格式化字符串>",<地址表>);
scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
其控制串由三类字符构成:
1。格式化说明符;
2。空白符;
3。非空白符;

int a;

01、申明一个整型变量,计算机会为这个变量分配一块内存
02、在计算机中,每一块内存都有一个地址

scanf("%d",&a);

03、你输入一个数据,将其保存到a中,实际上是保存到a所在的内存中

04、你要保存数据,则需要告诉计算机你要保存数据的地址,所以这里需要告诉计算机a的内存地址

额,个人感觉C语言是门很”硬“的语言,因为它相对其他高级语言更接近硬件底层,而相对于机器指令汇编又跳出了繁琐的底层处理器指令编程。
无法理解”&“或者说”地址“、”取地址“,是因为你站在高级(自然语言)语言的层面,而不是机器本身。任何变量都是数据,数据就会在硬件机器上有他的存储空间,存储空间有对应的位置,来方便我们操作这个存储空间,比如内存,内存地址。
这里我们定义了变量a,比如int a;实际上是预留了一个存储空间,存储空间有相应的位置,我们用符号”a“来指代,我们编译高级语言的时候,编译器会把我们所以对变量a的操作,转化为对相应存储空间的操作。
堆一块存储空间本质上有两种操作,输入和输出。a = 1;//是对存储空间的输入,也就是我们称的左值,把数据”1“写入变量a对应的存储空间;b= a;//是对存储空间的输出,把变量a所对应的内存中的数据输出,也就是我们称的右值,写入变量b所对应的空间。
int scanf(char *format[,argument,...]); 函数中参数其调用格式为: scanf("<格式化字符串>",<地址表>);
如果写做scanf("%d",a);我们是把变量a所在的存储空间中的数据作为右值输出,而在scanf中a变量的值作为键盘终端字符输入存储空间的地址,而这显然是不合理的,因为我们要把键盘终端输入端的字符存到变量a所在的存储空间,而不是变量a存储的数据所指向的内存空间~所以写做scanf("%d",&a);//”&“是以一个操作符,可以获取变量a所在的存储空间位置,而不是变量a所在存储空间中存储的数据~

所以的变量都在内存保存,既然保存的话我们就应该知道放在上面地方,所以就有了地址这个概念。
这个取地址符也就告诉计算机我把这个变量的放到哪个地方,在这个地方保存了变量的内容。

有一个很通俗的解释就是假如你叫张三,你同时有一个身份证号码,身份证号码是唯一的东西,所以就能标记你但是一般人都是叫你的名字而不是叫你的身份证号码。

就是你输入值的门牌号。有了门牌号才能取出这个值的内容啊

初阶段可认为是输入一个值就为取地址符后所定义字母或字符串的值