空间表SpaceList
比如在建一个成绩管理系统,这时候定义的名字一般都是char szName[20],这样比较浪费,其实不只是定义名字,定义好多变量都这样,并没有体现动态。
此处出现空间表(SpaceList),通过指针偏移,实现内存的零浪费,但是缺点是无法修改。只适合储存一些不变的东西,比如科目等。
return this + 1; //跳过此结构体,指针直接到它的后面
1 // ceshi2.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <Windows.h> 7 using namespace std; 8 /* 9 空间表 SpaceList 10 */ 11 typedef struct _BUFFER_OBJECT_ 12 { 13 int iAge; 14 char* szName; 15 void* Sub_1() //泛型指针 16 { 17 return this + 1; 18 } 19 }BUFFER_OBJECT,*PBUFFER_OBJECT; 20 typedef struct _NODE_OBJECT 21 { 22 int iOffset; 23 BUFFER_OBJECT BufferObject; 24 }NODE_OBJECT,*PNODE_OBJECT; 25 int main() 26 { 27 PNODE_OBJECT v1 = (PNODE_OBJECT)malloc(4096); 28 29 PNODE_OBJECT TravelNodeObject = v1; 30 for (int i = 0; i < 3; i++) 31 { 32 cin >> TravelNodeObject->BufferObject.iAge; //30443 33 TravelNodeObject->BufferObject.szName = (char*)(TravelNodeObject->BufferObject.Sub_1()); 34 cin >> TravelNodeObject->BufferObject.szName; 35 TravelNodeObject->iOffset = sizeof(NODE_OBJECT) + strlen(TravelNodeObject->BufferObject.szName); 36 TravelNodeObject = (PNODE_OBJECT)((UINT_PTR)TravelNodeObject + TravelNodeObject->iOffset); 37 } 38 return 0; 39 }