可以传二级指针
可以传一级指针的地址
可以传指针数组的地址
为什么?
首先我们先来看二级数组的传参
#include<stdio.h>
void get(int** pk) {
printf("%d", **pk);//*pk=pa;**pa=*pa=a
}
int main() {
int a = 10;
int* pa = &a;
int** pk = &pa;
get(pk);//传过去一个二级指针
return 0;
}
首先,一级指针传参
先注意看,这是传一级指针的写法
可见;一级指针传参,用一级指针接收很ok
#include<stdio.h>
void get(int* pa) {//&a需要一级指针接收
printf("%d", *pa);
}
int main() {
int a = 10;
int* pa = &a;
get(pa);//传一级指针【也就是传&a】
return 0;
}
重点来了,传一级指针的地址
首先我们知道,二级指针的概念:存放一级指针地址 的指针。(个人理解)
也就是说,二级指针就是用来存放一级指针的地址。
同理,一级指针的地址,我们要用二级指针来存放
#include<stdio.h>
void get(int** pk) {//一级指针的地址,需要二级指针接收
printf("%d", **pk);//*pk=pa;**pk=*pa=a
}
int main() {
int a = 10;
int* pa = &a;
get(&pa);//传一级指针的地址
return 0;
}
可见,传指针和传指针的地址所需要的形参是不一样的
传指针数组
指针数组的概念:用来存放一个或者多个指针的数组,称为指针数组。(个人理解)
我们可知:数组指针的元素都是指针;
那么通过知识点:数组的数组名代表首元素地址;
元素的地址=指针的地址
于是传的也是指针的地址,需要用二级指针接收
#include<stdio.h>
void get(int** pa) {//接收&a1
printf("%d", **pa);//*pa=&a1;**pa=*a1=a
}
int main() {
int a = 10;
int* a1 = &a;//一级指针
int* pa[] = {a1};//指针数组
get(pa);
//传指针数组的地址,
//数组名代表首元素地址,也就是传的是一级指针的地址&a1
//于是同上一个一样,接收一级指针地址需要二级指针
return 0;
}
get(pa)可以换成get(&pa);
#include<stdio.h>
int main() {
int a = 10;
int* a1 = &a;
int* pa[] = {a1};
get(pa);//根据其是数组,也可以写成get(&pa);
//int arr[]={0}
//&arr和arr除意义不同,一般是一样的
return 0;
}
以上就是二级指针传参的情况