0

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

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

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

谢谢!

4

2 回答 2

1

有问题的行占用您的 128-byte buffer,查看索引sizeof(A*)并返回对它的引用,将其转换为 type 的指针A

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

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

于 2012-10-17T18:55:08.147 回答
1

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

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

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

于 2012-10-17T18:55:14.977 回答