C语言中&是什么意思?


本文摘自PHP中文网,作者Guanhui,侵删。

C语言中&是什么意思?

C语言中&可以作为“按位与”或是“取地址”运算符,按位与运算符也是双目运算符,其功能是参与运算的两数各对应的二进位相与,而取地址运算符就是一元运算符,会将运算结果设置为右操作对象的地址。

按位与运算符

是将二进制数按照位的对应相与,得到一个新的二进制数。1与0为zhi0;1与1为1;0与0为0。

分析如下:

就是二进制的每一位相与。

比如:1010 0011& 0000 1111,结果为0000 0011。也就是与上0相当于把那位数清0,与上1相当于把那位保留。



Snipaste_2020-06-12_14-05-50.png

取地址运算符

对于c语言中的&运算符,定义:(&p)则是这样一种运算,返回当时声明p 时开辟的地址;但是根据我对代码的观察,我觉得&运算符不只是返回地址的功能;

例如:

1

2

3

4

5

int a = 1;

//假设a的地址是0x7dfe88

int *p = (int *)0x7dfe88;

int num = 1;

int *p1 = #

以上是一段简单的给指针p,p1赋值的代码,0x7dfe88是一段单纯的十六进制地址,但是当地址转指针的时候却必须加上强转(int *);如果不加强转,那么编译器就会提出警告( warning C4047: “初始化”:“int *”与“int”的间接级别不同);但是使用&运算符取地址的时候却不需要加任何强转就能编译通过,说明&运算符绝不是的获取地址那么简单,“=”赋值运算符的运算顺勋是从右向左,说明"="的右边也是一个指针,所以在此假设&运算符会取出num的地址,并且根据num的类型生成一个临时的指针。

根据假设,写出如下代码验证:

1

2

int num = 1;

double *p1 = #

结果编译器报“ warning C4133: “初始化”: 从“int *”到“double *”的类型不兼容”错误。所以我的假设有一定的道理。

推荐教程:《C#》

以上就是C语言中&是什么意思?的详细内容!

相关阅读 >>

c语言开根号代码是什么

c语言数组在内存中是怎么分配的?

c语言是高级编程语言吗?

c语言如何用if判断成绩等级?

c语言中二叉树中序遍历怎么执行?

c++类的静态数据成员和静态成员函数

c中scanf()和gets()之间的区别(代码示例)

c语句以句号结束对吗

strcat 在 c 语言中是什么意思?

c语言如何统计字符串中每个字符出现的次数?

更多相关阅读请进入《c》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...