为什么指针数组访问元素时不需要显式执行解引用操作?
问题解答
这是C++下标运算符[]的固有特性导致的,核心规则如下:
- 对指针类型使用
[下标]时,该操作本身已经包含了解引用逻辑:arr[i]和*(arr + i)是完全等价的表达式。 - 你代码里的
arr是int*类型,指向堆上分配的int数组首地址,arr[i]经过运算后得到的就是int类型的左值,可以直接作为cin >>的写入目标,完全符合语法要求。 - 如果强行写
*arr[i]反而会触发编译报错:因为arr[i]本身已经是int类型,不是指针,不能对非指针对象使用解引用运算符*。
你提到的多维指针数组场景同理:vararr[i][j]等价于*(*(vararr + i) + j),两层下标运算对应两次解引用,最终得到的就是数组中存储的具体值,所以可以直接传给cout输出。
内容的提问来源于stack exchange,提问作者Shivam Siuu
相关产品推荐
相关产品推荐

