马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
指向指针的指针
1>指向指针的指针
指针指向的是一个变量地址,当然可以指向一个指向变量,也就是指向指针的指针,称为二级指针。同理也有三级指针,四级指针,n级指针等。int a = 1;
int *p = &a;
int **pp = &p; //定义了一个指向指针p的指针pp
注意:在使用指针时注意定义时等号两边的统一。就上面例子而言,pp是一个二级指针,p是一个指针,对p取址就与pp统一。
2>指针数组和指向指针的指针
char *array[] = {"123", "abc", "!@#"};
char **pp1;
char **pp2[2];
pp1 = &array[0];
pp2[0] = &array[1];
利用指向指针的指针来指向指针数组有以下好处:
1)避免重复分配内存;2)在对存储的数据修改时,只需进行一处修改;3)提高代码的灵活性与安全性。
3>数组指针和二维数组
要用指针来指向二维数组,需要数组指针。int a[3][3] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
int (*p)[3] = a; //定义数组指针
//打印第二行第二列的数据
printf("%d", *(*(p+1)+1));
上方定义的数组指针指向一个数组,每个数组包含3个整形。见定义数组指针的语句,因此得到了这个指针的跨度是3个整形。a是个三行三列的数组,每一行是三个整形,刚好对应p指针的跨度,通过对p加一,即可指向下一行。对它进行解引用得到第二行的数组,再通过指针法即可访问到第二行第二列的数据。
!!!使用指针时考虑指针的跨度问题,跨度不统一则无法等价使用!!! |