2.9 指针
指针是C语言中的一种数据类型。掌握指针型数据的使用,是深入理解C语言特性和掌握C语言编程技巧的重要环节,正确灵活地使用指针,可以有效地描述各种复杂的数据结构,能够动态地分配内存空间,能够方便地操作字符串,还可以自由地在函数之间传递各种类型的数据,使程序简洁、紧凑,执行效率高。
2.9.1 地址和指针
首先需要了解程序中的数据在内存中是怎样进行存储的。在对程序进行编译时,程序中定义的变量会被分配到内存中的某一个单元,内存单元的长度由变量的类型决定。例如,int型变量分配2 个字节,float型变量分配4 个字节,char 型变量分配1 个字节。C程序中的变量在内存中占有一个内存单元,每个内存单元由若干个字节组成,每个字节都有自己的编号(即地址),而一个变量的地址是指该变量的内存单元中第一个字节的编号。C 语言允许在程序中使用变量的地址,并可以通过地址运算符“&”得到变量的地址,例如:
- float x;
- int a[10];
通过&x 和数组名a,就可以获得变量x 和数组变量a的地址。
C 语言通过直接访问和间接访问两种方式来读取内存中的变量。直接访问是通过变量名或地址访问变量的存储区,例如:
- scanf ("%d", &x );
- x=sqrt(x);
- printf ("%d", x );
间接访问是将一个变量的地址存放在另一个变量中。如图2.10 所示,变量x 的存储单元地址为1010,将变量x 的地址值存放在变量p中,访问x 时先找到p,再由p中存放的地址值找到x。
|
| 图2.10 变量的间接访问 |
知道了数据在内存中的存储和读取方式后,指针的概念就不难理解了。一个变量的指针就是该变量的地址(指针就是地址),如变量x的指针即为1010。
指针变量就是指存放某个变量的地址的变量,它用来指向另一个变量,如图2.10 所示中的p。