c - 这段代码有什么作用?内存分配

标签 c memory memory-management

有人可以帮助我更好地了解内存分配的工作原理吗?如果有人可以一步一步(希望有图片)了解这段代码中发生的事情,我将不胜感激:

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/

相关文章:

c - Netbeans 不编译文件

performance - 从 Redis SETS 获取数据是否比 HSETS 更快或更高效?

c++ - Malloc 宏重载也适用于对 malloc (C++) 的编译器调用吗?

ruby-on-rails - 如何修复佣金 Assets :precompile task causing "[FATAL] failed to allocate memory" issue?

C++ 结构声明 collect2 : ld returned 1 exit status

c++ - 并发空间上很酷的开源项目?

c++ - 从 Eclipse IDE 运行 C 程序时如何为其指定命令行参数

c++ - 使用 DELETE 来节省内存,有人可以证明

c++ - 删除、释放或取消分配?

c# - 堆栈 - 值类型的值存储在哪里?