二级指针
1.回顾一级指针:指向一个普通变量的内存区
eg:
1 int a =250;2 int *p = &a;//p保存着a变量的首地址 3 printf("a的首地址是%p\n",p); 4 printf("a的值是%d\n",*p);
2.二级指针定义:指向一级指针的指针,也就是存放着一级指针变量的地址。语法格式:数据类型 **二级指针变量名 = 一级指针地址;
eg:
int a = 250; int *p = &a; int **pp = &p;
printf("p的地址是%p,a的地址是%p,a的变量是%d\n",pp,*pp,**pp);
#include<stdio.h> int main(void) { int a = 250; int *p = &a; int **p = &p; printf("p的地址是%p,a的地址是%p,a的值是%d\n",pp,*pp,**pp);
**pp = 350;
printf("p的地址是%p,a的地址是%p,a的值是%d\n",pp,*pp,**pp);
return 0; }
3.二级指针处理普通变量多余,用一级指针即可。可用来处理字符串,经典笔试题:编写一个函数实现两个字符串的交换。
eg:
char *pa = "hello";
char *pb = "world";
目标:pa -> "world",pb -> "hello",指针互换
注意:通过pa和pb指针是无法修改字符串的值
#include<stdio.h> //定义指针交换函数swap void swap(char *p1,char *p2) { char *p3 = p1; p1 = p2; p2 = p3; } //做不到交换 int main(void) { char *pa = "hello"; char *pb = "world"; swap(pa,pb); printf("%s %s\n",pa,pb); return 0; }
#include<stdio.h> //定义指针交换函数swap void swap1(char **p1,char **p2) { char *p3 = *p1; *p1 = *p2; *p2 = p3; } //可以交换 int main(void) { char *pa = "hello"; char *pb = "world"; swap1(&pa,&pb); printf("%s %s\n",pa,pb); return 0; }