C 语言中真的没有引用吗?
我记得以前看过一篇文章,说 C 可以模拟 C++ 中的引用类型,具体貌似是将函数的参数类型变为 *& ,但是今天发现好像记错了。
使用百度和必应查到的大部分都是错误的文章,在 stackflow 里都说 C 没有引用。但是 C 真的没有办法模拟引用类型吗?(不使用指针)
具体来说,我希望函数在调用时不出现取地址符号,但是函数又能修改变量的值。 C 语言无法做到这一点吗?
例如:
void func(int *& a){ // 这里假设 *& 可以模拟引用类型
a = 10;
}
int a = 20;
func(a) // 不出现取地址符号
printf(a) // a = 10
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
函数在调用时,实参传递给函数的形参,会生成一份拷贝,在栈上新开辟出一个空间。在这片新开辟的空间内保存着与实参相同的值。
因此,我们在函数内修改的并非原本实参所在的空间,因此在不使用指针的情况下,我们是无法做到函数在调用时不出现取地址符号,但是函数又能修改变量的值。
要想在函数内修改函数外的变量(空间),我们必须是的在函数内部可以得到该空间的位置(地址),而要如此,我们只能通过参数传递变量的地址,或者一开始就定义成一个全局变量,这样在函数内部也是可以找到我们要修改的变量的真正位置。
而C++中的引用,底层其实也是由指针实现的。引用实质上我们在定义引用时:
语句
int &a_ref = a
等价于int * cosnt pa = &a
。使用引用时:
a_ref = 10
等价于*pa = 10
。