1.指针的简介
指针(pointer)作为C语言的一个重要知识点,可以算的上是C语言的灵魂,在C语言中使用也是十分灵活的,在实际应用中,我们可以通过使用指针指向数据的地址,对数据进行间接访问。
2.计算器的存储机制
谈起指针,就不得不说一下内存相关的问题,因为指针瑜底层硬件息息相关。下面就让我们先从计算机的存储机制开始了解一下吧。
现在先定义几个我们常见的变量吧
int a = 0x12345678;//变量类型:int 字节数:4(计算机系统里面int为四字节的数据)
char b = 0x33;//变量类型:char 字节数:1
char c[] = {0x33,0x22,0x11};
由于现在的计算机存储机制为小端输入,也就是先从数据的低位逐步向高位一个字节一个字节(也就是八位数据)写入地址位,而数组保存数据的顺序恰恰相反,从数组的第零位依次向后储存。其次,由于计算机对变量的保存是随机指定到特定的地址,所以我们并不清楚数据储存的地址在哪。那么,不妨假设,变量a的首地址为0x32,它的存储形式如下:
地址 | 变量a的存储(小端输入) |
0x32(首地址) | 78 |
0x33 | 56 |
0x34 | 34 |
0x35 | 12 |
3.定义指针
在了解了指针的基本介绍以及计算机存储单元的存储机制之后,我们再建议不了解一下指针吧!
指针即指针变量,不用惊讶,我们通常说的指针就是指指针变量,和上面定义的数据一样都是变量,但是它的作用是用于存放其他数据单元的首地址。若指针存放了某些数据单元的首地址,那么这个指针就指向了这个数据单元,如果某个指针存放的值是0,则这个指针就是一个空指针;
(unsigned)char 1字节 (unsigned)char * X字节
(unsigned)int 4字节 (unsigned)int * X字节
(unsigned)short 2字节 (unsigned)short * X字节
(unsigned)long 4字节 (unsigned)long * X字节
其中:X = (系统操作位数 / 8);
4.指针的操作(包括取地址、取内容、加和减)
在了解了指针是如何定义之后,那就让我们一起学习一下指针可以有什么操作吧,这一部分的学习我们可以使用C的编译器进行学习效果更佳哦!
取地址 p = &a 将数据a的首地址赋给P
取内容 p = *p 将指针指向的数据单元的值给取出来
加 p++ 令指针向下移动1个数据宽度
p+4 令指针向下移动4个数据宽度
减 p-- 令指针向上移动1个数据宽度
p-4 令指针向上移动4个数据宽度
注意:这里的加和减的对象是数据宽度,并不是数字简单的+1(-1),举个例子来说:我们定义了一个int类型的指针变量,我们把int a=0x33的首地址赋给p,也就是p = &a,在这里我们假设a的首地址是0x55,那么这个时候我们在对p进行+或者-运算时,数据宽度就是4,而不是1,p++的结果就是0x59;
至此,今天的学习就先到这里啦!剩下的部分明天再跟进吧。