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;
}
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;
}
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享