指针的介绍2后

发布于:2025-02-10 ⋅ 阅读:(52) ⋅ 点赞:(0)

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)


网站公告

今日签到

点亮在社区的每一天
去签到