您的位置:首页 > 其它

day15 - 动态构造内存

2012-06-10 00:13 183 查看
指针和数组的复习

总结:

指针 变量的运算:

指针变量不能相加,不能相乘,也不能相除

如果这两个指针所指向的是同一个连续空间中的不同存储单元

则这两个元素就能想减

一个指针变量到底占几个字节?

解答:

一个指针变量,无论它所指向的变量有多少个字节.都是4个字节

该变量本身都只占4个字节

一个变量的地址是用该变量的首字节来做地址的。

预备知识:

sizeof (数据类型)

功能:返回值就是该数据类型所占的字节数

sizeof(变量名)

功能:返回值是该变量所占的字节数

专题:

动态内存的分配

传统数组的是缺点的:

1.数组长度必须事先制定,而且只是一个常数,不能是变量。

#include <stdio.h>

void show(int *q)
{
int b[6] = {1,2,3,4,5,6};
*q = 88;
}

void show1(int *q)
{
/*
show函数定义的数组,在show函数执行完毕过后,那么里面的数组b我也不能使用。
传统定义方式的数组不能跨函数使用。
*/
}

int main(void)
{
/*
1.数组长度是先规定的,而且只能是整型的常量,不能是变量。
int b = 9;
int a[5] = {1,2,3,4,5};  //4 个字节  5个数字  4×5 = 20个字节。
*/

/*
2.传统形式定义的数组,该数组的内存程序员是没有办法手动去释放它。
在一个函数运行期间,系统为该函数数组所分配的内存空间是没有办法手动释放的
除非该函数执行的程序自动结束,系统才会把这个函数释放掉。

int a[5] = {1,2,3,4,5};  //4 个字节  5个数字  4×5 = 20个字节。
show(a);
*/

/*
数组的长度一旦定义,其长度就不能更改\
因为数组是一个常量.所以不能被更改。
int a[5] = {1,2,3,4,5};
a[6] = {1,2,3,4,5,6};
*/
int a[5] = {1,2,3,4,5};
show(a);
return 0;
}

/*
main函数结束完毕过后才自动释放掉。
*/

为什么需要动态的内存分配

动态数组很好的解决了传递数组的缺陷

传统数组也是叫做静态数组

#include <stdio.h>
#include <malloc.h>
int main(void)
{
int i =5;  //分配4个字节
int *p = (int *)malloc(4);
/*
1.要使用malloc函数,必须添加malloc.h文件头
2.malloc函数只有一个形参,并且形参是整型
3.4表示请求系统为本程序分配4个字节
4.malloc函数只能返回第一个字节的地址
5.第六行是分配了8个字节。 *p是一个字节,p所指向的内存也占了4个字节。
6.p本身所占的内存是静态分配的,而p所指向的内存地址是动态分配的。

*/
*p = 8; //*p代表的是一个int变量,只不过×p这个整型变量分配内存存储方式不同
free(p); //表示把p所指向的内存给释放掉,但是p本身是一个内存是静态的,不能由程序员手动释放,p本身内存只能让那个
//p变量所在的函数运行终止时由系统自动释放掉。
printf("%d",*p);

return 0;
}


本文出自 “Growthcourse” 博客,请务必保留此出处http://wangweihao.blog.51cto.com/4857217/893917
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: