返回介绍

6.1.3 解引用运算符“*”

发布于 2025-04-11 22:32:58 字数 1109 浏览 0 评论 0 收藏 0

既然可以通过取地址符获取一个指向变量的指针。那可不可以反过来,通过这个指针再找回原来的变量呢?

可以的,这种和取地址相逆的操作,我们把它称为解引用。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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。