您的位置:首页 > 编程语言 > C语言/C++

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

2015-10-26 21:56 316 查看
静态数组的缺点:
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];
//如果int占4个字节的话,则本数组总共包含有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); 
//p是int*类型
   
printf("%d\n", *p); 
//200   第20行
   
   
return
0;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言