本篇博客将讲解以下知识:
1、二级指针
2、指针数组
3、指针数组模拟二维数组
1、二级指针
指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?二级指针
如何理解二级指针?
以上述代码为例:
int ** pp=&p;
(1)pp的类型是int** ,int**是二级指针类型。
(2)pp中的内容是p的地址。
(3)
p+1在x86环境下跳过4个字节,在x64环境下跳过8个字节。
pp+1在x86环境下跳过4个字节,在x64环境下跳过8个字节。
类似的还能写出三级指针:
例如;int *** ppp=&pp;
四级指针:
例如: int**** pppp=&ppp;
常用的是一级指针,二级指针。
例子:
对于二级指针的运算有:
以下列代码为例:
#include<stdio.h>
int main()
{
int a = 10;
int* pa = &a;
int** ppa = &pa;
return 0;}
(1)*ppa通过对ppa中存放的地址解引用,这样找到的是pa,*ppa其实访问的就是pa
例如:
int b=20;
*ppa=&b;/价于pa=&b;
(2)**ppa先通过*ppa找到pa,然后对pa进行解引用操作:*pa,那找的是a;
例如:
**ppa=30;
//等价于*pa=30;
//等价于a=30;
2、指针数组
指针数组是指针还是数组?
我们可以用类比的思维来考虑问题:
比如:整型数组是存放整型的数组,字符数组是存放字符的数组。
那么指针数组是存放指针的数组。
例如:
#include<stdio.h>
int main()
{
char* arr[6];
int* arr2[10];return 0;
}
指针数组的每个元素都是用来存放地址的。
3、指针数组模拟二维数组(注意:模拟的二维数组,但不是真的二维数组)
代码:
上述代码中的: arr[0]就是arr1,arr[1]就是arr2,arr[3]就是arr3.