有人可以帮助我更好地了解内存分配的工作原理吗?如果有人可以一步一步(希望有图片)了解这段代码中发生的事情,我将不胜感激:
char a[3][4] = {"xy", "abcd", "!?"};
char (*b)[4], *c;
b = a + 1;
c = *a + 1;
我环顾四周,但没有找到任何可以彻底解释这一点的东西,谢谢!
编辑: 如果有人可以使用内存块解释它,我将不胜感激,例如 [x][y][][a][b][c][d][]
最佳答案
char a[3][4] = {"xy", "abcd", "!?"};
第一个命令在堆栈上分配一个 3 x 4 矩阵,并用一些字符初始化二维数组的元素。
char (*b)[4], *c;
在堆栈上保留一个指向名为 b 的大小为 4 的字符数组的指针。此外,它还创建了第二个名为 c 的字符指针。
b = a + 1;
您将数组 a + 1 的起始地址存储在指针 b 中,这意味着第二个元素(第二行 4 个字符)的地址。
c = *a + 1;
您取消引用 a,生成指向 a 的第一个元素的指针(a 的一个元素是大小为 4 的字符数组),并将 1 添加到该指针 - 即第一个条目的第二个字母。
关于c - 这段代码有什么作用?内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27842723/