C++中&GetObjects(info)[index]能否正确获取数组元素地址?
问题解答:数组元素地址获取的正确性分析
这段代码完全符合预期,你会得到数组中对应index位置的Object对象的地址,不存在未定义行为。
优先级与求值逻辑
C++的运算符优先级规则完全适用于该表达式,具体执行顺序如下:
- 先调用
GetObjects(info),返回指向动态分配数组起始位置的Object*指针(和原C代码中全局数组名退化为指针的行为一致)。 []运算符优先级高于&,因此先计算GetObjects(info)[index]——这等价于*(GetObjects(info) + index),即数组中第index个元素的左值引用。- 最后对该元素取地址
&,得到的就是该元素在数组中的内存地址,和原C代码&objects[index]的效果完全一致。
为什么不会取到指针的地址?
[]是作用在函数返回的指针上,先通过指针偏移解引用得到目标元素,再对元素取地址,而非对函数返回的临时指针本身取地址。只要GetObjects(info)返回的指针指向有效内存,这个元素就是合法的左值,取地址操作完全合规。
等价验证代码
你写的代码等价于:
Object* temp_ptr = GetObjects(info); Object* obj = &temp_ptr[index];
这和原C代码的逻辑完全匹配,仅多了一层函数封装来获取指针,行为没有任何差异。
内容的提问来源于stack exchange,提问作者user3001150
相关产品推荐
相关产品推荐

