c 语言指针总结(很全面^^)2007-04-13 11:28 指针说白了就是地址。指针变量就是用来存
放指针(地址)的变量。
1. 变量的指针和指向变量的指针变量
读起来很拗口,说白了就是变量的地址和用来存放变量地址的地址变量。因为一个变量在
编译的时候系统要为它分配一个地址,假如再用一个变量来存放这个地址,那么这个变量
就叫做指向变量的指针变量,也就是用来存放变量地址的这么一个变量。所谓 "指向"就是
指存放××的地址,如指向变量的指针变量,"指向"就是指用来存放变量的地址,再如指向
数组的指针变量,"指向"就是指存放数组的地址。只要理解了这个,指针也就不难了。另
外,还有指向字符串的指针变量,指向函数的指针变量,指向指针的指针变量等。
1) 指针变量的定义
形式:类型标识符 *标识符 如:int *pointer;
要注意 两点: *表示 pointer 是个指针变 量,在用这个变量 的时候不能写 成 *pointer,
*pointer 是 pointer 指向的变量。一个指针变量只能指向同一个类型的变量。如上面
pointer 只能指向 int 型变量。
2)指针变量的引用
两个有关的运算符:
& 取地址运算符 &a 就代表变量 a 的地址
* 指针运算符 *a 就代表变量 a 的值
2. 数组的指针和指向数组的指针变量
数组的指针指数组的起始地址,数组元素的指针指数组元素的地址。
1)指向数组元素的指针变量的定义与赋值
定义和指向变量的指针变量定义相同,c 规定数组名代表数组的首地址,即第一个数组元
素地址。
2)通过指针引用数组元素
我们通常引用数组元素的形式是 a[i],如果用指针可以这样引用,*(a+i),或定义一个指针
变量 p,将数组 a 的首地址赋给 p,p=a;然后用*(p+i)引用。
注意:指针变量p指向数组 a 首地址,则 p++指向数组a的下一元素地址,即 a[1]的地址。
3)数组名作函数参数
形参数组和实参数组之间并不是值传递,而是共用同一段地址,所以在函数调用过程中如
果形参的值发生变化,则实参的值也跟着变化。
4)指向多维数组的指针和指针变量
以二维数组为居多。假设定义了一个二维数组 a[3][4],那么
a 代表整个二维数组的首地址,也代表第 0 行的首地址,同时也是第 0 行第 0 列的元素的首
地址。a +0 和 a[0]代表第 0 行首地址,a+1 和 a[1]代表第一行的首地址。
假设 a 是一个数组的首地址,那么如果 a 是一维的,a+I 代表第 I 个元素的地址,如果 a 是
二维的,则 a+I 代表第 I 行的首地址。
那么第一行第二列的元素地址如何表示呢?a[1]+2 或&a[1][2]或*(a+1)+2。
我们只要记住:在二维数组中 a 代表整个数组的首地址,a[I]代表第 I 行的首地址,a[I]与