二级指针和指针函数

1.二级指针

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int a = 10;
	int* pa = &a;//pa就是一级指针变量
	int** ppa = &pa;//ppa就是二级指针变量

	**ppa = 20;

	printf("%d\n,a");
	return 0;
}

         a的值是4,a的地址是0x009efadc,

        pa为指针变量,pa存的是a的地址0x009efadc,因此可以通过pa来找到a的值,或者修改a的值。 * 为解引用操作符,int* pa表示pa为指针。

        ppa为二级指针,ppa存的是pa的地址,int** ppa中右边的*说明ppa是指针,而int*是说明ppa指向的对象是int*类型。二级指针是用来存放一级指针变量的地址的。

名称 类型
a 10 int
&a 0x012ffcf8 int

pa

0x012ffcf8 int*
&pa 0x012ffcec int*
ppa 0x012ffcec int**

 # '&'为取地址操作符。

2.指针函数

        普通我们使用的数组:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int arr[3][4] = { 1,2,3,4,2,3,4,5,3,4,5,6 };
	//1 2 3 4
	//2 3 4 5
	//3 4 5 6
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
    return 0;
}

        指针数组: 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a = 10;
	int b = 20;
	int c = 30;

	int* pa = &a;
	int* pb = &b;
	int* pc = &c;

	int* parr[10] = { &a,&b,&c };//parr就是用来存放指针的指针数组
	
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		printf("%d ", *(parr[i]));
	}
}

        int* parr就是我们的指针数组,我们在parr中存放a,b,c的地址。

        parr中的元素包括&a,&b,&c.

        &a指向的对象为a。

        &b指向的对象为b。

        &c指向的对象为c。

        接下来是我们的拓展内容:

        我们可以通过指针函数去合并不同的数组

        我们知道,parr中存放的元素是arr1,arr2,arr3,而传输过去的arr1为首元素的地址,因此parr为int*类型,用来存放地址。

        使用arr1的话,我们会:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int i = 0;
	int arr[] = {1,2,3,4,5,6,7,8,9,0};
	for (i = 0; i <= 9; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

        已知arr1,arr2,arr3被我们存放到parr中,我们应该如何去使用数组呢?

        由于arr[i]-->*(arr+i),想要打印出arr1,arr2,arr3的内容,我们只需要通过for循环parr[i][j]就可以:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int arr1[4] = { 1,2,3,4 };
	int arr2[4] = { 2,3,4,5 };
	int arr3[4] = { 3,4,5,6 };

	int* parr[3] = { arr1,arr2,arr3 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("%d ", parr[i][j]);
		}
		printf("\n");
	}

	return 0;
}

parr[i]表示的是parr的元素及arr1,arr2,arr3,parr[i][j]在这个基础上可视为arr1[j],arr2[j],arr3[j]。

猜你喜欢

转载自blog.csdn.net/2302_79491024/article/details/133943614