C语言中的指针(三)--动态内存的分配的必要性

本文探讨了传统数组的局限性,如长度固定、不能动态调整大小和跨函数使用的问题,指出动态内存分配的必要性。通过介绍malloc()函数创建动态数组,并强调使用后需手动释放内存。示例说明了动态内存如何实现跨函数共享,为解决静态内存缺点提供解决方案。
摘要由CSDN通过智能技术生成

本文有三个部分:

(一)传统数组的缺点

(二)为什么需要动态分配内存

(三)如何构建动态数组

(一)传统数组的缺点

1.数组的长度定义时就要定好了,且只能是常数,不能是变量,比如下面的例子

数组可以这样定义
int a[5];
而不可以这样定义
int len = 5;
int a[len];

2.系统在传统数组被定义时分发给他的内存,不能手动释放,只能等待程序运行完之后才能有系统自动释放

3.传统数组的长度不能再程序运行期间动态的扩充或缩小

4.不能跨函数使用,比如说,A函数定义的数组,在A函数运行期间的数组可以通过指针变量被其他函数使用,但A函数被调用之后,内存被释放掉了,主调函数就不能使用A函数定义的数组了。

#include <stdio.h>
void f()
{
    int a[3]={1,2,3};
    g(a); 
    printf("%d\n",a[1]);//数组可以被使用,因为修改了值,2被g函数改为88了
}
void g(int *p)
{
    p[1]=88;
}
int main()
{
    f();
    printf("%d\n",a[1]);//f函数被调用完了,里面的数组的内存被释放掉了,这里不能用数组a了,所以这个语句是错的
    return 0;
}

(二)为什么需要动态分配内存?当然是因为传统数组的缺点了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值