标签:++i 开头 list printf int 为什么 type lang 动态分配内存
在c语言里我们通过结构体和数组这两种数据结构构造线性表
typedef struct {
char data[10];
int length;
}SqList;
bool ListInsert(SqList &L,int i,char e){
for (int j = L.length; j>=i; --j)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
int main(){
SqList ls = {{‘a‘,‘d‘},12};
ListInsert(ls,1,‘h‘);
printf(ls.data);
return 1;
}
动态数组可以随程序需要而重新指定大小数组,也就是给他动态分配内存空间,动态数组的内存空间是从堆动态分配的,所以需要用指针来指向它在堆内的地址,而且使用完毕需要我们手动去销毁它。下面我们用一段代码来展示一下
int *test;
test = (int *)malloc(sizeof(int)*5);
for (int i = 0; i < 5; ++i) {
test[i]=i;
}
printf("%d", sizeof(test));
上面的执行结果是8,很多人会有疑问,我们不是给test分配了5*8(int占8字节)的空间了吗?为什么打印它的内存空间还是8,这里要说明一下,我们这里的test只是一个指针,也就是指向给我们分配内存空间的开头地址,从开头到下方的5×8的空间是专门给你用的,但你就仅仅是个int类型的指针,所以就只占8字节。
上面定义了指针,然后用它来动态分配内存空间,
标签:++i 开头 list printf int 为什么 type lang 动态分配内存
原文地址:https://www.cnblogs.com/szj666/p/13067610.html