首先考虑这样一个问题:
char t[10]=”hi”: char *p=”hi” 两者的区别:
可以清除的看到,第一个内存的动态存储区,第二个为内存的静态存储区,对于第二个而言,hi是常量所以不能够修改指针指向的地址其中的数据不能够做动态改变。
1>动态内存分配:
1.malloc函数:
void *malloc(unsigned int size)
解释:在内存的动态存储区域(堆)中分配一个长度为size的连续空间,其参数是一个无符号整形,返回值是一个系统所分配的连续内存空间的起始地址。分配失败的话(内存不足)返回NULL。
该函数仅仅对指针有作用引用malloc.h头文件(库)
应用举例:
#include<stdio.h>
#include<malloc.h>
void main()
{
char *a;
a=(char*)malloc(10*sizeof(char));
//申请一个10个单位的char则会么长的动态内存,返回一个void*指针(首地址)
//第一个括号为强制类型转换
if(a==NULL)
{
printf("失败”);
exit;
}
else
*a='h';
*(a+1)='e';
*(a+2)='l';
printf(a); //打印字符串
}
2.free 函数
作用释放动态内存。
例子:
void *free(void *p)
//举例:
char*a,*b;
a=(char *)malloc(10*sizeof(char));
b=a;
free(a); //释放掉a指针指向的动态内存。效果和free(b)相同
//如果申请了动态内存,最后一定要释放掉这些动态内存。
二、链表:
链表有线性结构和链式结构。例如数组就是最基本的线性结构。但是数组有一些很不方便的地方,比如插入元素不方便,需要大部分移动。
链表:链表是动态爆粗一些数据,不需要预先分配内存空间,在需要的时候动态申请内存。可以根据需要扩大或者缩小。
例子:链表的创建