指针 笔记5
一、二级指针
二级指针也是一个普通的指针变量,只是它里面保存的值是另外一个一级指针的地址
定义:
int guizi1 = 888;
int *guizi2 = &guizi1; //1 级指针,保存 guizi1 的地址
int **liujian = &guizi2; //2 级指针,保存 guizi2 的地址,guizi2 本身是一个一级指针变量

eg:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int guizi2 = 888; //存枪的第 2 个柜子
int *guizi1 = &guizi2; //存第 2 个柜子地址的第一个柜子
int **liujian = &guizi1; //手握第一个柜子地址的刘建
printf("刘建打开第一个柜子,获得第二个柜子的地址:0x%p\n", *liujian);
printf("guizi2 的地址:0x%p\n", &guizi2);
int *tmp;
tmp = *liujian;
printf("访问第二个柜子的地址,拿到枪:%d\n", *tmp);
printf("刘建一步到位拿到枪:%d\n", **liujian); //缩写成 **liujian
system("pause");
return 0;
二、二级指针的用途:
1. 普通指针可以将变量通过参数“带入”函数内部,但没办法将内部变量“带出”函数

2. 二级指针可以不但可以将变量通过参数函数内部,也可以将函数内部变量 “带出”到函
数外部。

#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b){
int tmp =*a;
*a= *b;
*b= tmp;
}
void boy_home(int **meipo){ //boy_home (**meipo->*meipo->boy) main *meipo->**meipo
static int boy = 23;
*meipo = &boy;
}
int main(void){
//int x=10, y=100;
//swap(&x, &y);
//printf("x=%d, y=%d\n", x, y);
int *meipo = NULL;
boy_home(&meipo);
printf("boy: %d\n", *meipo);
system("pause");
return 0;
}
三、多级指针的定义、使用
可以定义多级指针指向次一级指针
比如:
int guizi1 = 888;
int *guizi2 = &guizi1; //普通指针
int **guizi3 = &guizi2; //二级指向一级
int ***guizi4 = &guizi3; //三级指向二级
int ****guizi5 = &guizi4; //四级指向三级
// 有完没完。。。
// demo 8-14.c
#include <stdio.h>
#include <stdlib.h>
int main(void){
int guizi1 = 888;
int *guizi2 = &guizi1; //普通指针
int **guizi3 = &guizi2; //二级指向一级
int ***guizi4 = &guizi3; //三级指向二级
int ****guizi5 = &guizi4; //四级指向三级
printf("柜子 2 拿枪: %d\n", *guizi2);
printf("柜子 3 拿枪: %d\n", **guizi3);
printf("柜子 4 拿枪: %d\n", ***guizi4);
printf("柜子 5 拿枪: %d\n", ****guizi5);
system("pause");
return 0;
}

浙公网安备 33010602011771号