首页 > 其他 > 详细

深入理解数据类型、变量类型属性、内存四区和指针

时间:2015-03-27 23:56:53      阅读:432      评论:0      收藏:0      [点我收藏+]

数据类型可理解为创建变量的模具(模子);是固定内存大小的别名

数据类型的作用:编译器预算对象(变量)分配的内存空间大小。

既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。

变量本质:(一段连续)内存空间的别名。

内存四区

栈区(stack):也叫临时区,由编译器自动分配释放,存放函数的参数值,局部变量的值等。

堆区(heap):一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收。

全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,该区域在程序结束后由操作系统释放。

常量区:字符串常量和其他常量的存储位置,程序结束后由操作系统释放

程序代码区:存放函数体的二进制代码。

函数调用模型

函数1调用函数2,函数1称为主调函数函数2称为被调用函数。

Main(主调函数)分配的内存(在堆区,栈区、全局区)都可以在被调用函数里使用。

C/C++可以在临时区分配内存,但是用完后被系统清了。

如果在被调用函数里面的临时区(栈)分配内存,主调用函数是不能使用的。

要弄清是主调函数分配内存,还是被调用函数分配内存。

主调函数如何使用被调用函数分配的内存(技术关键点:指针做函数参数)。

Heap、stack生长方向和内存存放方向是两个不同概念。

指针

1指针也是一种变量,占有内存空间,用来保存内存地址

2在指针声明时,*号表示所声明的变量为指针

在指针使用时,*号表示 操作 指针所指向的内存空间中的值

*p相当于通过地址(p变量的值)找到一块内存;然后操作内存

*p放在等号的左边赋值(给内存赋值)

*p放在等号的右边取值(从内存获取值)

3指针变量和它指向的内存块是两个不同的概念

含义1  给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1;

含义2  给*p赋值*p=‘a‘; 不会改变指针变量的值,只会改变所指的内存块的值 

含义3  =左边*p 表示 给内存赋值,=右边*p 表示取值 含义不同

4指针是一种数据类型,是指它指向的内存空间的数据类型

含义1:指针步长(p++),根据所致内存空间的数据类型来确定

结论:指针的步长,根据所指内存空间类型来定。

以上为个人理解总结,转载请注明出处!




深入理解数据类型、变量类型属性、内存四区和指针

原文:http://blog.csdn.net/lsh_2013/article/details/44683523

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!