c语言指针与动态内存分配

静态数组的缺点:

1.数组长度必须事先指定而且必须是整形

2.长度一旦被定义之后不能在函数运行是动态的改变大小

3.静态数组无法跨函数使用

4.静态数组无法手动释放必须等到程序结束才能回收内存

5.传静态数组是连续性存储需要连续的内存空间占内存资源

 

Voidtest()

{

    int a[5]={1,2,3,4,5};//无法手动释放这20个字节的数据

    //只能有函数结束时由系统回收

}

 

Intmain()

 

{

    return 0;

}

 

 

 

 

而动态数组很好的解决了这些问题。

 

# include <stdio.h>

# include <stdlib.h>

 

int main()

{

    int a[5]; //如果int4个字节的话,则本数组总共包含有20个字节,每四个字节被当做了一个int变量来使用

    int len;

    int * array;

    int i;

   

    //动态的构造一维数组

    printf("请输入你要存放的元素的个数: ");

    scanf("%d", &len);

    array = (int *)malloc(4 * len);  // 动态的构造了一个一维数组, 该一维数组的产度是len, 该数组的数组名是array,该数组的每个元素是int类型 类似于 int pArr[len];

   

    //对动态一维数组进行赋值

    for (i=0; i<len; ++i)

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

   

    //对位一维数组进行输出

    printf("一维数组的内容是:\n");

    for (i=0; i<len; ++i)

        printf("%d\n",array[i]);

   

    free(array); //释放掉动态分配的数组 如果不释放会内存泄露

   

   

    return 0;

}

 

对于malloc的用法

 

# include <stdio.h>

# include <stdlib.h>

 

 

 

void f(int * q)

{

   

    *q = 200;

    //free(q); //q所指向的内存释放掉 本语句必须的注释掉,否则会导致代码出错

}

 

int main()

{

    int * p = (int*)malloc(sizeof(int)); //sizeof(int)返回值是int所占的字节数

    *p = 10;

   

    printf("%d\n", *p);  //10

    f(p);  //pint*类型

    printf("%d\n", *p);  //200   20

   

    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值