空间表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 }

 

posted @ 2016-10-10 09:36  卷珠帘  阅读(592)  评论(0编辑  收藏  举报