指针的介绍2后
1.二级指针
1.1二级指针的介绍
二级指针是指向指针的指针
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 100;
int* pa = &a;
int** ppa = &pa;
printf("a = %d\n", a);
printf("&a(pa) = %p\n", pa);
printf("&pa(ppa) = %p\n", ppa);
return 0;
}
上面代码的意思是
打印 a、 a的地址、pa的地址
如下图:
记忆方法:
(1)int *pa = &a
*表示pa是一个指针,
int表示pa指向的内容是 int 型
(2)int **pa = &pa;
右边的*表示pa是一个指针
int * 表示pa指向的内容是 int* 型,
即指向一个指针
(3)此时,pa是一级指针,ppa是二级指针
当然还有三级指针 int***pppa = &ppa
一般不超过三级
2.二级指针的使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 100;
int* pa = &a;
int** ppa = &pa;
printf("%p\n", pa);
printf("%p\n", *ppa);
return 0;
}
1.二级指针解引用一次,就可以拿到一级指针的地址
*ppa == pa
2.二级指针解引用两次,就拿到了一级指针所指向的内容
a == *pa == **ppa
2.指针数组
1.指针数组的介绍
我们知道,
字符数组是一个数组,它里面存放着字符
整型数组是一个数组,它里面存放着整型
所以
指针数组是一个数组,它里面存放着指针
当然,二级指针也可以被存放
2.指针数组的使用
2.1指针数组模拟二位数组
void test()
{
int arr1[3] = { 0,1,2 };
int arr2[3] = { 3,4,5 };
int arr3[3] = { 6,7,8 };
int* arrs[3] = { arr1,arr2,arr3 };
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3; ++j)
{
printf("%d ", arrs[i][j]);
}
printf("\n");
}
}
指针数组arrs中存放着三个数组的数组名
数组名就是数组首元素的地址
然后拿着每个数组的数组名进行遍历即可
arrs[i][j] == *(*(arrs + i ) + j)