指针和内存
c程序在编译后,主要有3种使用内存的方式:
(1)静态/全局内存:这里的变量在程序开始时分配,程序终止内存消失。所有函数都能访问全局变量,静态变量的作用域则局限在定义该变量的函数内部。
(2)自动内存:主要在函数内部声明,函数在调用时才创建,声明周期与被调用函数一样短暂。
(3)动态内存:对上分配内存,根据需要创建和释放,释放后即会消失。指针引用分配的内存,作用域局限在引用内存指针。
指针主要用来操作内存中的数据,理解内存的分区和组织方法更容易弄清指针如何操作内存。
指针的基本概念:
(1)指针变量:内存中别的变量、对象或函数的地址。
(2)指针对象:内存分配函数(malloc)分配的内存。
(3)指针的类型:通常根据指针所致的数据类型进行声明。
(4)指针对象:可以是任何合法的C数据类型,基本类型或合成类型等。
(5)指针本身:不包含所引用数据类型信息,只包含地址。
指针的用途:
(1)动态内存分配
(2)传递数据结构
(3)作为参数传递给函数
(4)作为返回数据的类型
(5)高效访问数组
(6)更容易访问合成数据类型
指针的缺点(空针错误):
(1)访问数组和其他结构时越界
(2)自动变量消失后被引用
(3)堆上分配的内存释放后被引用
(4)内存分配前解引指针