我无法在标题中真正描述我的问题,但基本上我需要一些指针算术方面的帮助。假设您有一个如下所示的结构。然后你会得到一个指向内存结构中 long 后面的指针。假设指针是*p。所以我会做 p += sizeof(void *) 来获取下一个指针位置的 p 。现在我如何真正让 p 指向 next 所指向的内容,而不仅仅是让它指向内存中下一个指针的位置?
struct freeblock {
long s;
// <--- THE POINTER WOULD BE POINTING HERE
struct freeblock *prev;
struct freeblock *next;
}
最佳答案
这可能是一个棘手的问题。您确实不想在结构中进行指针算术。原因是Struct Alignment 。如果你有一个像这样的结构,会发生什么:
struct a{
char x; //address 0x8
//potentially 3 bytes lost here:
int y; //address 0x12
}
y 不会在 x 之后的一个字节处开始。为了保持对齐,所以 y 从 4 的倍数的地址开始,在 x 之后会添加一些填充字节。
如果你有一个结构实例 0x08 的地址并添加一个 char 的大小,产生 (0x09),你将不会得到 y 0x12 的开头,你会得到一些垃圾数据,其中一部分是垃圾,一部分是 y。
在这种情况下,你应该没问题,因为相同的类型是一个接一个的,你可以这样做:
freeblock* p = s.prev;
p += sizeof(p);
freeblock next = *p;
您确实希望获得指向该结构的指针,并让编译器为您计算偏移量。
关于c - 在 C 中使一个指针指向另一个指针所指向的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5916152/