天天看点

游戏筑基开开发之指针数组及数组指针详解(C语言)

1.指针数组(储存指针的数组)

优先级

“[]”的优先级比“*”的高,[]的优先级为1,*的优先级为2。且优先级:()>[]>*

指针数组的声明

数据类型 *变量名[size];

  int *p[10];

  因为优先级的关系,p先跟[]结合,说明p是一个数组,然后p再跟*结合。即说明数组p中的元素是指向整型数据的一个指针。

  相当于定义了10个指向整型变量的指针。在此,p的数组元素为指针的数组,本质上是数组。

  指针数组的变量名相当于一个二级指针。

示例如下:

//例一
	int *p[10];
	int a = 0, a1 = 0, a2 = 0;
	p[0] = &a;
	p[1] = &a1;
	p[2] = &a2;

	*(p[0]) = 1;
	*(p[1]) = 2;
	*(p[2]) = 3;

	printf("%d %d %d\n", a, a1, a2);// 1 2 3

	//例二
	int *p1[10];
	for (int i = 0; i < 10; i++)
	{
		p1[i] = malloc(4);
		printf("%d\n", p1[i]);//输出指针数组中存储的信息
		*(p1[i]) = i + 1;
		printf("%d\n", *p1[i]);//输出指针数组中存储的地址指向的整型数据
	}
	int **p2 = p1;
	printf("%d\n", *(*(p2 + 5)));//输出指针数组中第6个元素存储的地址指向的整型数据
           

2.数组指针(指向数组的指针)

数组指针的声明

数据类型 (*变量名)[size];

  int (*p)[10];

  因为优先级的关系,p先跟*结合,说明p是一个指针,然后再跟[]结合。即说明指针p指向的是一个有10个整形元素的数组。

  相当于变量名p就是指向数组首元素的指针,本质上是指针。

  在c语言中经常用来指向一个二维数组。

示例如下:

int(*p3)[10];//只是定义,并未占用内存空间
	int a[12][12];
	p3 = a;
	(*(p3+1))[5] = 5;
	//p3[1][5] = 5;
	printf("%d\n", (*(p3+1))[5]);//5
           

加深印象:

游戏筑基开开发之指针数组及数组指针详解(C语言)
图片来源:jack_Meng - 博客园 (cnblogs.com)

继续阅读