文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.1.3 解引用运算符“*”
既然可以通过取地址符获取一个指向变量的指针。那可不可以反过来,通过这个指针再找回原来的变量呢?
可以的,这种和取地址相逆的操作,我们把它称为解引用。C 语言中,解引用需要用到星号“*”,我们把它称为解引用运算符。它的使用格式为:
*指针
即在指针前面使用星号,就可以对它进行解引用,即访问到原来的变量。例如:
char ch1 = 'A'; char ch2 = *&ch1; printf("ch1 = %c, ch2 = %c\n", ch1, ch2);
在第 2 条语句中使用了“*&ch1”,这看起来非常怪异。这里对变量 ch1 连续使用了解引用运算符和取地址运算符,它们的优先级相同,且都是一目运算符。由于结合性为从右至左,所以就相当于是“*(&ch1)”,即先通过取地址符获得指向变量 ch1 的指针,然后再通过解引用运算符对这个指针进行解引用,等于又找回了原来的变量 ch1。所以,这条语句的作用等价于:
char ch2 = ch1;
在“*&ch1”中,由于取地址和解引用是一个互逆的操作,所以最终的结果还是 ch1 变量本身。
编译运行程序,结果如下:
ch1 = A, ch2 = A
可见,最终变量 ch2 的值与变量 ch1 的值是一样的。
从上述代码中,读者可能看出一个问题:先对变量进行取地址,然后再进行解引用,等于又回到了变量本身,这可是一种徒劳的行为啊,这样做有什么意义呢?
是的,确实是徒劳的行为,这里只是为了说明解引用运算符的功能,实际项目代码中是不会这么使用的。
在第 2 章中,介绍变量时曾讲过,可以将变量看成是一个容器,根据变量类型的不同,就可以在容器中存放不同类型的数据。例如:
C 语言中,还允许定义专门用于存储内存地址类型的变量,我们将其称为地址变量。又因为指针的实质就是内存地址,因此,地址变量又被称为指针变量。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论