C(数据结构与算法)---动态分配存储空间malloc函数的简单使用、顺序表基本运算的实现

#include<stdio.h>
#include<stdlib.h>//也可使用#include<malloc.h>
#include<string.h>
int main(){
	char *p;//定义一个字符指针变量 p
	p=(char *)malloc(10*sizeof(char));//使用 malloc()函数为其分配长度为 10 个连续的字符空间,将该存储空间的首地址赋给 p
	
	strcpy(p,"China");//再将字符串"China"放到这个存储空间中
	printf("%c\n",*p);//输出C   存储空间的首地址
	printf("%s\n",p);//输出China
	free(p);
	
	return 0;
} //此处我使用的是DevC++编译

p=(char*)malloc(10*sizeof(char));

p:指针变量

(char*):强制类型转换,转换为字符指针

10:分配的字符个数

sizeof(char) :求每个字符占用的空间大小

注:指针变量p属于自动变量,它自身的存储空间由系统自动分配和释放,

但用 malloc()函数分配的存储空间(也就是 p指向的存储空间)不会被系统自动释放,

所以需要使用free(p)释放

下面我们看一个更难点的demo

#include<stdio.h>
#include<malloc.h>//也可使用#include<stdlib.h>
#define MaxSize 100 
typedef char ElemType;
typedef struct SL{//SL可删去,这是结构体知识点
	ElemType data[MaxSize];
	int length;//记录当前元素的个数 
}SqList; 
void CreateList(SqList* &L,ElemType a[],int n)//结构体类型的一个指针,&是引用调用(传址)
{
	L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间,从内存要404个字节 一个int 4个字节 再加一个整型 //整体建立顺序表 
	for(int i=0;i<n;i++){
		L->data[i]=a[i];
	}
	L->length=n;
}
void DispList(SqList *L){
	for(int i=0;i<L->length;i++){
		printf("%c  ",L->data[i]);
	}
	printf("\n");
}
void DestroyList(SqList * &L)
{
   	free(L);
}
int main(){
	char *p;//定义一个字符指针变量 p
	p=(char *)malloc(10*sizeof(char));//使用 malloc()函数为其分配长度为 10 个字符的存储空间,将该存储空间的首地址赋给 p,,再将字符串"China"放到这个存储空间中
	
	strcpy(p,"China");
	printf("%c\n",*p);
	printf("%s\n",p);
	free(p);
	
	SqList *Ls;
	ElemType c[5]={97,65,'c','d',100};//65->A
	CreateList(Ls,c,5);
	DispList(Ls);
    DestroyList(Ls);
	return 0;
} 

注:这种动态存储空间分配方式的优点是不需要预先分配存储空间,分配的空间可以根据程序的需要扩大或缩小,如链式存储结构通常采用动态存储空间分配方式。其缺点是需要程序员简单地管理内存空间,也就是用 malloc()函数动态分配的空间,在后面一定要用free()函数释放,否则动态分配的空间对于程序而言就丢失了,久而久之可能会造成内存泄露。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值