C语言重点—指针篇
指针是C语言的精华,也是C语言的难点,掌握指针的用法,C语言也就没什么难点了。
所谓指针,就是内存的地址,指针变量,就是保存了内存地址的变量。
计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如int占用4个字节,char占用1个字节,为了正确地访问这些数据,必须为每个字节都编上号码,每个字节的编号是唯一的,根据编号即可找到某个字节的地址。
下图是4G内存中每个字节的编号(以十六进制表示):
我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从0开始依次增加,对于32位环境,程序能够使用的内存为4GB,最小的地址为0,最大的地址为0XFFFFFFFF。
为什么需要指针?指针解决了一些编程中基本的问题。第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。第二,指针使得一些复杂的链接性的数据结构的构建成为可能,比如链表,链式二叉树等等。第三,有些操作必须使用指针。如操作申请的堆内存。还有一点:C语言中的一切函数调用中,实参传递给形参的机理都是“按值传递(passbyvalue)”,如果我们要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号()运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量