一:指向普通变量的指针
定义:int a,*p;
指针的赋值(建立指向关系) p=&a;
指针的应用(等价代换):a-----*p;
&a-----p;
二:指向一维数组元素的指针:
定义:int a[5]; int *p;
指针的赋值(建立指向关系):p=a;//p=&a[0];(指向了一维数组的首元素);
指针的应用(等价代换):
地址:&a[i]----a+i----p+i----&p[i];
元素值:a[i]----*(a+i)----p[i]----*(p+i);
p++;//p现在相当于&p[0][1];
三:指向二维数组元素的指针:
定义:int a[m][n]; int *p;
指针的赋值(建立指向关系):p=&a[0][0]; // p=&a[0];(指向二维数组的首元素)
指针的应用(等价代换):
*(p+x)----a[x/n][x%n];
a[i][j]----*(p+i*n+j);
p++//现在的p相当于&a[0][1];
四:指向二维数组行的指针(指向一维数组行的指针)
定义:int a[m][n]; int (*p)[n];
指针的赋值(建立指向关系):p=a; // p=&a[0];
指针的应用(等价代换):
地址:&a[i][j]----*(a+i)+j----&p[i][j]----*(p+i)+j;
元素值:a[i][j]-----*(*(a+i)+j)----*(*(p+i)+j)----p[i][j];
p++;//现在的p相当于&a[1],即第二行的地址。
五:指向指针的指针:
定义:int a; int *p; int **q;
指针的赋值(建立指向关系):p=&a; q=&p;
指针的应用(等价代换):
地址:&a----p-----*q
&p----q
元素值:a----*p----**q
六:指向函数的指针:
定义:float abc(int a,float b);
float (*p)(int,float);
指针的赋值(建立指向关系):p=abc;
指针的应用(等价代换):函数的调用 y=abc(a,b);
y=(*p)(a,b);
七:指针数组:
定义:int a; int b[20]; int *p[5];
指针的赋值(建立指向关系):p[0]=&a; p[1]=b;
指针的应用(等价代换):
地址:p[0]----&a; *p[0]----a; p[1]-----&b[0]
函数值:b[i]----*(p[1]+i)----p[1][i];
八:返回值为指针的函数:
定义:int *(p)(int a,float b);//p函数的返回值为一个地址。