【C语言】深入理解指针(二)(下)

时间:2024-10-15 06:56:36

本篇博客将讲解以下知识:

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.