- 指针与地址
通常的机器都有一系列连续编号或编址的存储单元,这些存储单元可以是单个进行操作,也可以连续成组进行操作。指针是能够能够存放一个地址的一组存储单元(通常是2或4字节),所以,指针就像一个访问计算机内存空间的工具。
一元运算符 & 可用于取一个对象的地址,语句
p = &c ;
将把c的地址赋给变量p,称p为指向“c”的指针。地址运算符&只能应用于内存中的对象,即变量与数组元素。他不能作用于表达式,常量或register类型的变量。
一元运算符 * 是间接寻址或间接引用运算符。当它作用于指针时,将访问指针所指向的对象。我们假定int型x和y,ip是指向int类型的指针。
指针ip声明如下:
int *ip;
由于指针也是变量,所以在程序中可以直接使用,二不必通过间接引用的方法使用。例如,如果ip是另一个指向整型的指针,那么语句
ip = ip;
将把ip中的值拷贝到ip中,这样,指针ip也将指向ip所指的对象。
- 指针与函数参数
C语言是以值传递的方式将参数值传递给被调用函数的,所以,被调用函数不能直接修改主函数的变量。但是将函数定义为以下形式:
下列语句
swap(&a,&b);
一元运算符 & 用来取变量的地址,这样&a就是一个指向变量a的指针。swap函数的所有参数都声明为指针,并且通过这些指针来间接访问他们指向的操作数。
指针参数使得被调用函数能够访问和修改主调函数中对象的值。
- 指针与数组
在C语言中,指针与数组关系十分密切,通过数组下标能完成的任何操作都可以通过指针完成。一般来说,用指针编写的程序比用数组下标编写的程序执行速度快。
声明
int a[10];
a[i]表示该数组的第i个数组。如果pa的声明为
int *pa;
则说明它是一个指向整型对象的指针,那么。赋值语句
pa = &a[0];
则可以将指针pa指向数组a的第0个元素,即pa的值为数组a[0]地址。
这样,赋值语句
x = *pa;
将把数组元素a[0]中的内容复制到变量x中。
/*摘自《C程序设计语言·第二版》*/