关于这几个问题论坛上已经有比较详细的文章,这里主要描述一些遇到的问题,并附上链接。
一、结构体内存对齐
例如采用数组的形式顺序存储线性表时,以下两种表示都可以:
typedef struct LNode *List;
struct LNode{
ElementType Data[MAXSIZE];
int Last;
};
typedef struct LNode *List;
struct LNode{
ElementType *Data;
int last;
};
他们在初始化的时候会略有不同,第一种结构体的内存空间中就包括这个数组,而第二种,结构体内只是一个指针,在初始化线性表时要再给这个指针指向的数组申请内存空间。
List MakeEmptyList(){
List PtrL;
PtrL = (List)malloc(sizeof(LNode));
PtrL->Last = -1;
return PtrL;
}
List MakeEmptyList(int MaxSize){
List PtrL;
PtrL = (List)malloc(sizeof(LNode));
PtrL->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
PtrL->Last = -1;
return PtrL;
}
那这里就有个问题,这两种结构体分别是申请了多大的空间?假设我们这里的ElementType
是double
型的,对于第一个定义中Maxsize为2。
#include<stdlib.h>
#include<iostream>
using namespace std;
#define MAXSIZE 2
typedef struct LNode *List;
struct LNode{
double Data[MAXSIZE];
int Last;
};
// typedef struct LNode *List;
// struct LNode{
//