3.指针与数组、函数的关系
(1)对于一维数组 int a 或指针 int *a
a+i 指向 a
(2)对于字符串 char s 或指针 char *s
s+i 指向第 i个字符 s
(3)对于二维数组int a[j]
*a+j 指向 a[0][j]
*(a+i) 指向 a[0]
*(a+i)+j 指向 a[j]
例:对于 a[2][3]={1,2,3,4,5,6,}; 有 *(*(a+1)+1)=5;
(4)对于字符串数组char p[j] 或字符型指针数组char *p
*p+j 指向第 0个字符串的第 j个字符
*(p+i) 指向第 i个字符串的第 0个字符
*(p+i)+j 指向第 i个字符串的第 j个字符
例:对于 *p[]={"ABC","DEF"}; 有 *(*(p+1)+1)='E';
例:对于 char p[][3]={"ABC","DEF"}; 有 *(*(p+1)+1)='E';
(5)对于指针数组int *a
a 指向 变量i
即 *a=变量i 或 a=&变量i
(6)对于结构struct XY
{int x;int *y}*p;
p是指向结构XY的指针
(*p).x 或 p->x 是表示 x 的内容
(*p).y 或 p->y 是表示指针 y 的值(地址)
*(*p).y 或 *p->y 是表示 y 所指的内容
&(*p).x 或 &p->x 是表示 x 的地址
(7)指向函数的指针
对于 void func(char *str)
{…}; //定义了一个函数
void (*p)(char*);//定义了一个函数指针
p=func; //让指针指向函数
则(*p)("…"); //用指针p可以调用函数func
(8)指向多个不同函数的指针数组
对于void function_1() {…};
…
void function_4() {…}; //定义了四个函数
typedef void(*menu_fcn)();//定义了指向函数的指针
menu_fcn command[4]; //定义了指针数组
command[0]=function_1;
…
command[3]=function_4; //让指针数组指向四个函数
则command[0](); //用指针数组中的一个元素调用一个函数 |