我有以下 C 代码,我正在尝试理解它。
char buffer[128];
A* a = (A*) &buffer[sizeof(A*)];
起初,我试图这样做,A* a = (A*) buffer[sizeof(A*)];
这给了我一个警告,我想这是因为这实际上会给我一个字符sizeof(A*)
并投射它?另一个困惑是由于 buffer 已经是指向数组第一个元素的指针,为什么我需要一个&
运算符来获取一个指向A*
. 有人可以帮助我理解这段代码吗?
谢谢!
有问题的行占用您的 128-byte buffer
,查看索引sizeof(A*)
并返回对它的引用,将其转换为 type 的指针A
。
另一个困惑是由于缓冲区已经是指向数组第一个元素的指针,为什么我需要一个 & 运算符来获取一个指向 A* 的指针。
嗯,这是因为,当您buffer
使用带有 的下标编写数组索引时[]
,它返回指向缓冲区索引的值,而不是内存位置本身。通过预先&
获取该数据的内存地址。
(A*)
- 转换为数据结构 A 的指针
&buffer[]
- 转到缓冲区指向的内存位置
[sizeof(A*)]
- 使用指向 A 数据结构的指针的大小作为索引