我很难理解下面的代码,我知道 t 是一个多维字符变量(3 行 3 列),而 p 是一个指针或指针数组,指针数组不应声明为:
int **p[3][3];
p= new int*[3]
而不是 *p = (char *)t;
谁能帮助我理解这个声明的含义?..提前致谢
#include <iostream>
using namespace std;
int main() {
char t[3][3], *p = (char *)t;
for(int i = 0; i < 9; i++)
*p++ = 'a' + i;
cout << t[1][1];
return 0;
}
最佳答案
char t[3][3] 在内存中分配 9 个字符,类似于:
1 2 3 4 5 6 7 8 9
[ ][ ][ ][ ][ ][ ][ ][ ][ ]
接下来让指针 p 指向第一个分配的 char ( *p = (char * )t
1 2 3 4 5 6 7 8 9
[ ][ ][ ][ ][ ][ ][ ][ ][ ]
*p
知道有 9 个分配的字符,您现在可以使用语句 *p++ 向前移动指针,所以在第一个 *p++ 之后
1 2 3 4 5 6 7 8 9
[ ][ ][ ][ ][ ][ ][ ][ ][ ]
*p
然后将字符 'a'+i 插入该内存位置
1 2 3 4 5 6 7 8 9
[ ][a][ ][ ][ ][ ][ ][ ][ ]
*p
1 2 3 4 5 6 7 8 9
[ ][a][b][ ][ ][ ][ ][ ][ ]
*p
等等……
注意运算符的优先级很重要,++(后缀)的优先级高于 *(反引),所以首先指针递增一个(++),然后反引给出对分配内存的“访问”,如果如果您希望更明确地说明它,则可以改用 *(p++)。
关于c++ - 在 C++ 中声明二维指针数组的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42722313/