我有以下 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 数据结构的指针的大小作为索引