c语言中动态存储分配,C语言-用指针实现内存动态分配

动态存储分配函数

在C语言中,动态分配内存是通过动态存储分配函数 malloc() 来实现的,其功能是:

在内存的动态存储区中分配一连续空间。若申请成功,则返回指向所分配内存空间的起始地址的指针;若申请内存空间不成功,则返回NULL(值为0)。

#include

#include

int main()

{

int a[5]={10,15,8,9,6};

int length;

printf("请输入你想分配内存空间的个数:");

scanf("%d",&length);

int *p = (int *)malloc(sizeof(int)*length); //指针变量p中存放的是动态分配内存块的起始地址

*p=10; //相当于a[0]

p[1]=15; //相当于a[1]

printf("%d %d\n",*p,p[1]);

return 0;

}

运行结果

0e78c4a84e36

image.png

#include

#include

int main()

{

int length;

printf("请输入你想分配内存空间的个数:");

scanf("%d",&length);

int *p = (int *)malloc(sizeof(int)*length);

if(p==NULL){ // 检查内存分配是否成功

printf("Unable to allocate memory.\n");

exit(1);

}

//也可以把 p 当成一个普通数组来使用

printf("请输入 %d 个数:",length);

for(int i=0;i

scanf("%d",&p[i]);

//打印输出数组

printf("你输入的数组为:\n");

for(int i=0;i

printf("%d\t",*(p+i));

free(p); //释放分配的内存空间

return 0;

}

运行结果

0e78c4a84e36

image.png

注意:

在调用 malloc() 时,应该利用 sizeof 计算存储块大小,不要直接写数值,因为不同平台数据类型占用空间大小可能不同

每次动态分配空间都必须检查是否成功,考虑到意外情况的处理

虽然这里的存储块是动态分配的,但它的大小在分配后也是确定的。不要越界使用,尤其不能越界赋值,否则可能引起非常严重的错误

动态存储释放函数

动态存储分配函数 void free(void *p) 功能:

释放同动态存储分配函数申请到的整块内存空间,p为指向要释放空间的首地址。如果p的值是空指针,则free什么都不做。该函数无返回值。

注意:

释放后不允许再通过该指针去访问已经释放的块,否则可能引起灾难性错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值