#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体
struct GenericStruct {
int memsize;
float floatData;
};
int main() {
// 分配足够大的内存空间
char* data = (char*)malloc(10000);
// 计算头部和尾部的大小
size_t HEADSIZE = sizeof(GenericStruct);
size_t ENDSIZE = sizeof(GenericStruct*);
// 将数据指针强制转换为 GenericStruct 指针
GenericStruct* point = (GenericStruct*)data;
(*point).memsize = 20;
(*point).floatData = 1.0;
for (int i = 0; i < point->memsize; i++) {
*(char*)(point + i) = (char)i;
}
// 在数据的结尾部分存储指向自身的指针
*(GenericStruct**)((char*)point + HEADSIZE + point->memsize) = point;
// 移动指针到下一个结构体的位置
GenericStruct* point2 = (GenericStruct*)((char*)point + HEADSIZE + ENDSIZE + point->memsize);
point2->memsize = 10;
point2->floatData = 5.0;
// 在每个结构体的结尾部分存储指向自身的指针
*(GenericStruct**)((char*)point2 + HEADSIZE + point2->memsize) = point2;
for (int i = 0; i < point2->memsize; i++) {
*(char*)(point2 + i) = (char)i;
}
//结果一致
printf("%p p1\n", point);
printf("%p *(GenericStruct**)((char*)point2 - ENDSIZE)\n", *(GenericStruct**)((char*)point2 - ENDSIZE));
free(data);
return 0;
}
自引用指针生成链表
最新推荐文章于 2024-07-23 18:51:15 发布