快跟“动态内存分配方式”熟络起来鸭
内容摘要:
分配的方式分为动态静态两种,本文着重阐述动态,并引申与静态的对比,在此之前会先介绍关于动态分配方式的定义、运用等。
关键字:
动态分配方式、静态分配方式、储存空间、分配方式、堆上分配、栈上分配、malloc函数、free函数。
目录索引:
一.定义、二.运用、三.申请与释放的剖析、四.与静态内存分配的区分与比较
正文:
一. 定义:
(一)动态内存分配方式:
指在程序运行的过程中动态地分配或者回收内存空间的分配内存空间的方法。
(二)个人理解:
也就是以堆上分配的方式(内存由人工申请并且释放),程序运行时人为的通过malloc函数来进行内存大小的申请,使用之后由通过free函数来释放内存。
二. 运用:
(一)解密英文藏头诗
代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i, n = 0;
char *s[100], str[100];
char e;
scanf("%c",&e);
while(e!='\n')
{
if(e!=' ')
{
str[i]=e;
i++;
}
scanf("%c",&e);
}
i=0;
while(str[0] != '#')
{
s[n] = (char *) malloc( sizeof(char) * ( strlen(str) + 1 ));
strcpy(s[n], str);
n++;
scanf("%c",&e);
while(e!='\n')
{
if(e!=' ')
{
str[i]=e;
i++;
}
scanf("%c",&e);
}
i=0;
}
for(int i =0; i < n; i++)
{ char ss[110];
strcpy(ss, s[i]);
printf("%c", ss[0]);
free(s[i]);
}
return 0;
}
演示:
输入内容:
输出内容:
三.申请与释放的剖析
(一)malloc函数
1.意义:
如上文所提到的动态内存分配之中就包括“输入”时用到malloc函数,可以说malloc时动态内存分配的前提,是申请的过程。
2.格式:
1.需要引用头文件#include<stdlib.h>
2.void*malloc(unsighn long size)
3.特点:
malloc函数返回的是地址,这个地址就是动态分配的内存空间的起始地址,类型具体为viod*。
4.代码实现:
int*p=malloc(4);
(二)free函数
1.意义:动态内存空间便是通过该函数释放。
2.代码实现:
# include <stdlib.h>
void free(void *p);
3.特点:
free函数无返回值,释放指针变量p所指的内存单元。
四.与静态内存分配的区分与比较
静态内存也就是栈上分配(与堆上分配相对的分配方式,如数组,一旦定义了数组长度,之后便不可更改长度值),其实还包括形参、函数调用、局部变量,我们程序大多都是栈上分配。
(一)特点:
相对的,该方式内存是由系统分配并且释放。
(二)以数组为例:
静态分配下的数组的劣势:
1.数组长度不能是变量。
2.在一个函数中定义的数组只能在该函数中运行。
谢谢观看