有人可以解释一下 C 中的这个陈述在内存中发生了什么吗?



我有以下C代码,我正在尝试理解它。

char buffer[128];
A* a = (A*) &buffer[sizeof(A*)];

起初,我试图用A* a = (A*) buffer[sizeof(A*)];这给了我一个警告,我想这是因为这实际上会给我sizeof(A*)的字符并投掷它?。另一个混淆是,由于缓冲区已经是指向数组第一个元素的指针,为什么我需要 & 运算符来获取指向 A* 的指针。有人可以帮助我理解这段代码吗?

谢谢!

有问题的行采用您的 128 字节buffer,在 sizeof(A*) 处查看索引并返回对它的引用,将其转换为 A 类型的指针。

另一个混淆是,由于缓冲区已经是指向数组第一个元素的指针,为什么我需要 &运算符来获取指向 A* 的指针。

这是因为,当您使用带有 [] 的下标编写索引buffer数组时,它会返回指向缓冲区该索引的值,而不是内存位置本身。通过预置&,您将获得该数据的内存地址。

(A*) - 强制转换为数据结构 A 的指针

&buffer[] - 转到缓冲区指向的内存中的位置

[sizeof(A*)] - 使用指向 A 数据结构的指针的大小作为索引

最新更新