我读了这个C++ tutorial , 在指针部分有一个令人困惑的例子,就是这样:
double (*pVal2)[2]= new double[2][2]; //this will add 2x2 memory blocks to type double pointer
*(*(pVal2+0)+0) = 10;
*(*(pVal2+0)+1) = 10;
*(*(pVal2+0)+2) = 10;
*(*(pVal2+0)+3) = 10;
*(*(pVal2+0)+4) = 10;
*(*(pVal2+1)+0) = 10;
*(*(pVal2+1)+1) = 10;
*(*(pVal2+1)+2) = 10;
*(*(pVal2+1)+3) = 10;
*(*(pVal2+1)+4) = 10;
int (*pVal)[2]
是数组指针吗?
我不明白为什么它为 double[2][2]
分配内存,但 *(*pVal2+1)+4)
变为 4?
最佳答案
使用螺旋法则:
+--------+
| +---+ |
| ^ | |
double (*pVal2)[2];
^ ^ | |
| +-----+ |
+---------------+
pVal2
是指向 2 个 double
数组的指针。或者,更简单:
using T = double[2];
T *pVal2 = new T[2];
其余代码会导致未定义的行为:*(p + idx)
等同于 p[idx]
,因此 *(*( pVal2+1)+4)
等同于pVal2[1][4]
。但是pVal2[1]
的类型是double[ 2]
,所以那里没有第 5 个元素...
关于c++ - 动态内存分配和指针非字符数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32514715/