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

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

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

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

例如:


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

int a = 20;
func(a) // 不出现取地址符号
printf(a) // a = 10
阅读 4.4k
1 个回答

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进