"&"和"*"是C语言里面的两个斜杠青年,不同的形式具有不同的作用。
一、"&"运算符
1.按位与运算符(Bitwise AND operator)
对两个操作数的每一位进行逐位比较,相应位都为1时,结果的相应位才为1,否则为0。
int a = 5; // 二进制: 0101
int b = 3; // 二进制: 0011
int result = a & b; // 结果: 0001 (即1)
2.取地址运算符
&是一个超级侦探,能够瞬间查出任何人的地址,在C语言里这个地址被称为内存地址。例如,&girl会返回变量girl的内存地址。这就像你通过"&"查到了girl家的具体位置,然后你就可以随时去“拜访”她了。
这个地址可以存储在指针变量中,或者用于指针运算。
ptr = &girl; // 把girl的地址赋给指针变量ptr
ptr++; //指针自加运算
二、"*"运算符
1.乘法运算符
用于数学计算的运算符,计算两个数的乘积,咱们再熟悉不过了。
2.解引用运算符
*也有超级侦探的一面,这位神探善长的技能是按图索骥,只要你给出任何人的地址,它就能立马找到这个人。C语言里指找到用于获取指针指向的变量的值,其实也就是这个变量本身(值就是变量到底是什么,是变量的本质)。例如,如果ptr是一个指向girl的指针,那么*ptr将返回girl的值。
meizi = *ptr; // 找出ptr指向的变量的值,也就是girl的值
只不过有个头痛的问题,girl是什么类型的变量呢?她的值又是什么呢?
自然不是int型,也不是double、char型,她绝不是这么普通单调乏味的类型,一定是一个综合类型,就叫她“对象”吧!
至于她的值嘛!只能留给研究妹子的专家学者回答了。
3.指针声明修饰符:
星号还用于声明一个指针类型的变量。例如:
int *ptr; //表示ptr是一个指向整数的指针。
总结一下,"&"和"*"之所以能用于不同的运算符,是因为它们的操作数不同:
"&"用作按位与运算符时操作数有两个,称为双目运算符;用作取地址运算符操作数只有一个,称为单目运算符。*也是一样,只不过用于一个操作数时,除了解引用运算符之外,还可用指针声明修饰符,其实这两个运算符的本质是一样的,详见下文:
指针简介:欲送你花,先找你家