关于C语言地址、取地址运算符”&“

来源:本站
导读:目前正在解读《关于C语言地址、取地址运算符”&“》的相关信息,《关于C语言地址、取地址运算符”&“》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《关于C语言地址、取地址运算符”&“》的详细说明。
简介:今天在看到关于C语言运算符”&“的问题,因为之前自己学C语言时也遇到这个问题,就整理一下思路。

问题如下:

int a;

scanf("%d",&a);

我们老师讲,&是取地址符,但是我就奇怪,为什么叫取地址?

我们明明是想知道a是多少,而不是说它在哪,地址不是形容一个事物在哪吗?我输个10,a就是10了。

额,个人感觉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所在存储空间中存储的数据~

提醒:《关于C语言地址、取地址运算符”&“》最后刷新时间 2024-03-14 00:59:39,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《关于C语言地址、取地址运算符”&“》该内容的真实性请自行鉴别。