当前位置:网站首页>用指针和malloc定义一个数组
用指针和malloc定义一个数组
2022-08-09 15:03:00 【翔在天上飞】
①malloc作为一个包含在<stdlib.h>头文件下的函数,用于申请空间。
②我们平常定义数组一般习惯性的就直接定义,比如int a[5],此处就是直接定义了一个数组,数组内的元素都是int型,并且有五个,从一开始就确定了数组a的大小,并且无法被改变。并且变量被存放在栈区,栈区的变量都是有系统自己开辟空间存储,自动销毁空间释放的。
③其实,还有一种定义数组的方式,那就是借助人为申请空间的方式定义一个数组。请看如下程序:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *a = (int *)malloc(sizeof(int[5]));
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;
int i;
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
free(a);
return 0;
}
④定义的方法是首先得定义一个指针,然后在这个指针的指向下,利用malloc去开辟一个自定义大小的空间。
⑤此方法定义的数组变量被存放在堆区,是由用户自己开辟和释放的。
⑥下面来看结果运行结果:
可见结果是理想无误的。
⑦使用这种定义方式可根据变量 n 动态申请内存,不会出现存储空间浪费的问题。但是,如果程序执行过程中出现空间不足的情况时,则需要加大存储空间,此时需要进行如下操作:
1.新申请一个较大的内存空间,即执行int * temp = new int[m];
2.将原内存空间的数据全部赋值到新申请的内存空间中,可以使用memecpy函数;
3.将原来的堆空间释放,即执行delete [] p; p = temp;
⑧当然,如果是在C++中,可以使用标准模板库(STL),像vector可以很方便
边栏推荐
猜你喜欢
随机推荐
PE格式系列_0x05:输出表和重定位表(.reloc)
软件测试流程
Unity Shader零基础入门4:纹理贴图与法线贴图
unity3d画布/UI自适应屏幕的方式
The practical skills Vim _1. Vim way of solving problems
wireshark抓包新手使用教程
使用libwebsockets搭建一个简单的websocket服务器
Vim practical skills_4. Manage multiple files (open + split + save + netrw)
fiddler工具栏及其使用
CTF在线加解密以及常用工具
全局服务器调度简介
多元回归分析
libev库解剖(1)
NAT-UDP穿透详解与实践
云模型和Logistic回归——MATLAB在数学建模中的应用(第2版)
Excel绘制统计图
7z解压软件(小巧好用)。百度云下载链接
Face recognition sample code analysis (1) - program parameter analysis
7.25-7.29学习总结(状态机及PWM原理)
Makefile通用模板