c++ - 在 C++ 中声明二维指针数组的方法

标签 c++ arrays pointers

我很难理解下面的代码,我知道 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/

相关文章:

java - 如何将数组存储在单个数组中

c - 使用 qsort() 对指向包含字符串的结构的指针进行排序

c - 指针赋值无效

c++ - 如何设置按钮(包括复选框按钮)的背景颜色?

c++ - 使用 C++ 的 VSPackage,如何在 Visual Studio 中获取当前工作项目目录?

c++ - 错误 : initializer expression list treated as compound expression

c++ - 为什么建议在运算符重载中将函数声明为 "friends"

php - 在查询结果中将不同的数组合并为一个数组

c# - 在构造函数中初始化数组类变量

c++ - 如何阻止这种内存泄漏