(C语言)指针初识(4)——二级指针、指针数组

目录

一、二级指针

二、指针数组


一、二级指针

        首先,知道什么是一级指针。如下代码:

int main()
{
	int a = 10;
	int* pa = &a;
	return 0;
}

        上述代码中,pa是一个指针变量,用来存放a的地址的变量。而这里的pa就是一个一级指针变量。

        一级指针变量意思是,我们在进行解引用时,只需要对pa解引用一次就可以找到a.

即:*pa就是a

代码如下:

int main()
{
	int a = 10;
	int* pa = &a;
	*pa = 20;
	printf("%d\n", a);
	return 0;
}

看运行结果:(C语言)指针初识(4)——二级指针、指针数组_第1张图片

输出20,说明确实通过*pa改变了a的值。

思考:

        a是一个变量,我们将a的地址存放在pa里,而pa也是一个变量(指针变量),我们是不是也可以将pa的地址存放到一个变量里面去 ?

        不可以?可以哒!想一下,指针就是地址,地址就是编号,其实就是一串数字,而这串数字在内存中,也有自己的地址,我们将这串数字的地址存放到一个变量里面去,即,将pa这个指针变量的地址存放到一个变量里面去。

如下代码:

int main()
{
	int a = 10;
	int* pa = &a;
	int** ppa = &pa;
	return 0;
}

这里的ppa就是一个二级指针变量。

        二级指针变量意思是,我们在进行解引用时,只需要对ppa解引用两次就才可以找到a。先对ppa解引用找到pa,再对pa解引用找到a.

代码:

int main()
{
	int a = 10;
	int* pa = &a;
	int** ppa = &pa;
	**ppa = 20;
	printf("%d\n", a);
	return 0;
}

运行结果:

(C语言)指针初识(4)——二级指针、指针数组_第2张图片

输出20,说明确实通过**ppa改变了a的值。

再度理解:

        对于int* pa=&a;中的*说明pa是一个指针,而pa指针所指向的对象是int类型的;

        对于int* * ppa=&pa;中,第二个*说明ppa是指针,而第一个*与int合起来,说明ppa所指向的对象是int*类型的。

每个*都有自己的含义

总结:二级指针变量是用来存放一级指针变量的地址。

错误理解:二级指针是地址的地址。

二、指针数组

指针数组的主语是数组

含义:存放指针的数组其实就是指针数组

举例:

int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	int* pa = &a;
	int* pb = &b;
	int* pc = &c;
	return 0;
}

        在这里,我们是将a,b,c这样的变量一个一个的存放进创建的指针变量里面,但是在这里大家想一想,如果想要创建的指针变量过多,我们再向上面一样创建是不是太麻烦了。思考之前学过的数组,当我们创建的整型太多的时候,我们会想到利用数组来表示,所以在这里,我们需要创建的指针变量过多的时候,我们也可以利用指针数组来表示。

如下:

int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	int* arr[3] = { &a,&b,&c };
	return 0;
}

在这里,arr就是存放指针的数组。

打印如下:

int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	int i = 0;
	int* arr[3] = { &a,&b,&c };
	for (i = 0; i < 3; i++)
	{
		printf("%d ", *arr[i]);
	}
	return 0;
}

显示找到元素的地址,然后解引用,就可以找到相应的元素。

可以利用指针数组模拟一个二维数组

int main()
{
	int arr1[2] = { 1,2 };
	int arr2[2] = { 3,4 };
	int arr3[2] = { 5,6 };

	int* arr[3] = { arr1,arr2,arr3 };
	return 0;
}

理解:

(C语言)指针初识(4)——二级指针、指针数组_第3张图片

打印:

int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 2; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

初识指针到这里就结束了,进阶内容更加精彩哦!希望多多支持,一起加油诶!

你可能感兴趣的