C 语言中真的没有引用吗?

发布于 2022-09-12 23:31:49 字数 369 浏览 28 评论 0

我记得以前看过一篇文章,说 C 可以模拟 C++ 中的引用类型,具体貌似是将函数的参数类型变为 *& ,但是今天发现好像记错了。

使用百度和必应查到的大部分都是错误的文章,在 stackflow 里都说 C 没有引用。但是 C 真的没有办法模拟引用类型吗?(不使用指针)

具体来说,我希望函数在调用时不出现取地址符号,但是函数又能修改变量的值。 C 语言无法做到这一点吗?

例如:


void func(int *& a){ // 这里假设 *& 可以模拟引用类型
   a = 10;
}

int a = 20;
func(a) // 不出现取地址符号
printf(a) // a = 10

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

看海 2022-09-19 23:31:49

函数在调用时,实参传递给函数的形参,会生成一份拷贝,在栈上新开辟出一个空间。在这片新开辟的空间内保存着与实参相同的值。

因此,我们在函数内修改的并非原本实参所在的空间,因此在不使用指针的情况下,我们是无法做到函数在调用时不出现取地址符号,但是函数又能修改变量的值

要想在函数内修改函数外的变量(空间),我们必须是的在函数内部可以得到该空间的位置(地址),而要如此,我们只能通过参数传递变量的地址,或者一开始就定义成一个全局变量,这样在函数内部也是可以找到我们要修改的变量的真正位置。

而C++中的引用,底层其实也是由指针实现的。引用实质上我们在定义引用时:
语句 int &a_ref = a等价于 int * cosnt pa = &a
使用引用时:
a_ref = 10 等价于 *pa = 10

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文