指向指针的指针
- 不用管名字是怎样,抓住关键词,还是个指针。
- 只不过前面多了个定语是指向指针的。
- 指针本身是个地址,现在它指向的位置是变量的地址。
- 普通指针呢,是个地址,只不过指向的位置是一个变量本身。
举个栗子:
每个人都有一个物理地址,就是我们实际居住的地方。想一下网上购物,需要填写的那个送货地址,那就相当于一个指针,指向我们的地址。知道地址了,就可以查到我们是谁。知道我们在哪儿了,就可以直接获取相应的地址。
所以使用起来:地址=&人
;相应的,人=*地址
。
那么指针的指针呢,送货地址,也是数据的一种,看作一个单位。也需要一个位置来存储,虽然可能是在我们的脑子中,也可能在手机收货地址中,总之得一个地方存储。
所以,地址2就是一个指针的指针:地址2=&地址
;地址=*地址2
;人=*地址=**地址2
;
cpp
#include <stdio.h>
#include <string.h>
/* 功能:指针的指针
时间:2024年10月
地点:贤者楼129
作者:LChen
*/
int sort(char **p){ // 冒泡法对5个字符串排序函数
int i,j;
char *temp; // 交换的中间变量
for(i=0;i<5;i++)
for(j=i+1;j<5;j++)
if(strcmp(*(p+i),*(p+j))>0){ // 头文件string.h中的字符串比较函数
temp=*(p+i); // 提出字符串地址,用+i+j来选择不同串
*(p+i)=*(p+j); // 交换字符串地址
*(p+j)=temp;
}
return 0;
}
int main() {
int i;
char **p,*pstr[5];
char str[5][20]; // 存储字符串数据
//输入数据
for(i=0;i<5;i++) //将第i个字符串的首地址赋予指针数组 pstr的第i个元素
pstr[i]=str[i]; // 行指针
printf("input 5 strings:\n");
for(i=0;i<5;i++)
scanf("%s",pstr[i]);
p=pstr;
// 数据处理:排序
sort(p);
// 输出数据
printf("strings sorted:\n");
for (i=0;i<5;i++)
printf("%s\n",pstr[i]);
return 0;
}