1.多级指针认识(包括二级)
指针就是地址变量,就是存放地址的变量,一级指针是存放其他变量的地址的变量,而多级指针则是存放指针地址的变量。
例如
int data;
int *p;
p = &data;
这里的一级指针是保存的是data的地址
二级指针则是保存的是指针p本身的地址
例如
int *p;
int **pp;
pp = &p;
这里的pp保存的是指针p本身的地址;而*pp保存的是一级指针p保存的地址
特别注意
其实保存一级指针的地址还可以再定义一个一级指针来保存一级指针的地址,但是这样是有缺陷的,例如,第二个一级指针是直接读取不了第一个一级指针所指向的变量的值,而二级指针是可以直接实现这个操作的,例如一级指针p指向的是整型变量data的,即*p = data,而二级指针pp是指向一级指针p的,当pp想直接读取到data的值的时候,直接(**pp)即可。即(**pp) = data。
直接上代码
#include <stdio.h>
int main()
{
//二级指针认识
int data = 10;
int *p;
p = &data;
int *p2; //传统的方式是可以再定义一个指针指向指针,但这样是取不到data的内容的
p2 = &p;
printf("data的地址是%p\n",&data);
printf("p保存的地址是:%p\n",p);
printf("p的地址是:%p\n",&p);
printf("P的取内容是:%d\n",*p);
printf("p2的取内容是:%d\n",*p2);
puts("\n");
//定义一个二级指针直接指向p
int **p3;
p3 = &p;
printf("p3保存的地址是:%p\n",p3);
printf("*p3是:%p\n",*p3);
printf("p3直接访问到data值是:%d\n",**p3);
return 0;
}
结果
二级指针的应用
#include <stdio.h>
void getOrder(int (*pstu)[3],int data,int **pous)
{ //此处定义一个二级指针用来保存下面的指针地址的变化
*pous = (int *)(pstu + data);
}
int main()
{
int scores[3][3] = {{80,99,98},
{60,77,88},
{58,65,33}};
int order; //学生的代号0,1,2
int *pos;
int i;
printf("Pleae Input the order what you want to check!\n");
scanf("%d",&order); //输入想要查询的学生学号分别是0.1.2
getOrder(scores,order,&pos);
for(i = 0;i < 3;i++)
{
printf("The scores of student is %d\n",*pos++);
}
return 0;
}
以上便是二级(多级)指针的理解,三级,四级,五级依然是这样,按照规律来即可。