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

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

2015-04-14  青岛  张俊浩

今天在论坛贴吧看到关于C语言运算符”&“的问题,因为之前自己学C语言时也遇到这个问题,就整理一下思路回帖,也顺便整理成一篇博客~

问题如下:

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

额,个人感觉C语言是门很”硬“的语言,因为它相对其他高级语言更接近硬件底层,而相对于机器指令汇编又跳出了繁琐的底层处理器指令编程。
无法理解”&“或者说”地址“、”取地址“,是因为你站在高级(自然语言)语言的层面,而不是机器本身。任何变量都是数据,数据就会在硬件机器上有他的存储空间,存储空间有对应的位置,来方便我们操作这个存储空间,比如内存,内存空间,内存地址。
这里我们定义了变量a,比如int a;实际上是预留了一个存储空间,存储空间有相应的位置,我们用符号”a“来指代,我们编译高级语言的时候,编译器会把我们所以对变量a的操作,转化为对相应存储空间的操作。
对一块存储空间本质上有两种操作,输入和输出。

1. 我们可以通过赋值号"="来区分对存储空间的输入输出(写读)操作;

比如:

1.1 a = 1;//存储空间a在赋值号=左侧,则表示是对存储空间的输入(往存储空间写值),也就是我们称的左值,把数据”1“写入变量a对应的存储空间;

1.2 b= a;//存储空间a在赋值号=右侧,是对存储空间的值输出,把变量a所对应的内存中的数据输出,也就是我们称的右值,写入变量b所对应的空间。

2. 对于没有赋值号"="的API(函数接口),如何区分输入输出(写读)呢?
比如:

2.1 输入/写操作,可以加一个额外的符号 "&";
比如:scanf("%d",&a);//”&“是以一个操作符,表示往a存储空间写值~

2.2 输出/读操作,默认只写变量名(a)即可
比如:printf("%d", a); //没有额外符号比如类似"&",默认a/变量名表示内存空间的输出/读~

  • 32
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值