【发布时间】:2021-05-11 09:26:12
【问题描述】:
当我试图理解这个数组的指针tp时,我遇到了一件奇怪的事情
#include <iostream>
int main() {
using namespace std;
short tell[3]{1, 2, 3};
short (*pas)[3] = &tell;
cout << (*pas)[2] << endl;
cout << *pas[2] << endl;
cout << endl;
return 0;
}
我得到了两个输出的两个不同的值。
第一个是正确的,是3。
但是,对于第二个,它似乎返回一个每次都不同的随机数。
这两者有什么区别?
【问题讨论】:
-
第二个是未定义的行为。第一个相当于
pas[0][2]第二个相当于pass[2][0] -
只需使用
-Wall启用警告。您将收到“警告:数组下标 6 在 'short int [3]' [-Warray-bounds] 11 | cout
标签: c++ c++11 pointers operator-precedence pointer-arithmetic