关于C++中返回int引用类型的get函数的疑问
关于返回引用的C++函数解析
先拆解你疑惑的核心:
arry[index]等价于*(arry + index),这是已经完成解引用的操作,指向的是数组中第index个位置的int类型元素本身,不是地址。所以函数返回arry[index]的引用,本质是返回这个数组元素的别名,而非指针或地址。
再逐个理清你的疑问:
- 不是返回未解引用的指针:
arry[index]已经通过下标运算符完成解引用,得到的是具体的数组元素。函数声明int &get要求返回int类型的引用,而数组元素是合法的左值,可以被绑定到引用上,这个返回完全符合语法要求。 arry[index]不是地址:如果要返回地址,需要写&arry[index],此时得到的是int*类型的指针。而arry[index]就是元素本身,比如数组arr = {1,2,3},arr[1]就是值为2的那个int变量。- 两种
&完全不同:- 函数声明里的
&(比如int &get)是类型修饰符,用来声明引用类型,告诉编译器这个函数返回的是某个变量的别名,调用方拿到的不是值的副本,而是直接关联原变量的引用。 - 取地址的
&(比如&arr[1])是一元运算符,作用是获取变量的内存地址,返回的是指针类型。
- 函数声明里的
举个实际使用的例子,能更直观理解这个函数的作用:
int main() { int arr[] = {10, 20, 30}; // 用引用接收函数返回值 int &elem_ref = get(arr, 1); // 修改引用的值,会直接改变原数组的元素 elem_ref = 50; // 此时arr[1]的值已经变成50 return 0; }
内容的提问来源于stack exchange,提问作者matan izhak
相关产品推荐
相关产品推荐

