目录
指针p存入num的地址,p是对p中存放的地址进行操作,*p是对p中存放地址所对应的数据进行操作。
二级指针
把指针存放在另外一个二级指针中,三级指针相似类推
p[2]相当于*(p+2)
int num = 0;
int *p = NULL;
int **q = NULL;
p = #
q = &p;
num = *p = **q;
int *a[5];
a:int **
//因为该数组指针,a是指向的第一个数组的指针,
而第一组数组在内存中存放的是第一个数据的地址,
所以a就是指向一个指针的二级指针
//理由如下图
指针数组传参
二维数组每一行的元素的地址都是固定的,因为要满足连续性和稳定性的特点
二维数组传参穿的是数组指针和行数;
数组指针:int (*a)[5]
指针数组传参传的是二级指针和行数;
指针数组:int *a[5]
是用来操作字符串数组
一个字符串首地址需要一个字符型指针存储,多个就需要多个存储
所以就需要指针数组存
char *p[5] = {"sd","sd","rftg","adsfg","ert"};
int str(char **pstr,int len)
{
printf("%d",pstr[i]);
}
//打印每一个字符串
二维数组传参的交换方式图解
数组默认在栈区里存储(auto类型)
数组指针传参的交换方式图解
字符串常量都在字符串常量区储存,他的值不能随意改变,程序会崩溃,传参时只能改变其地址图解如下