多维数组下指针使用总结

===============================================================

本文总结以下四种形式指针的用法:


第一种

int (*pi)[MAX]; //pi指向含有MAX个int元素的数组


使用如下,可用于处理二位数组:

#include 

#define MAX 3
int main(void)
{
	int arrayInt[][MAX] = {
		{1, 2, 3},
		{4, 5, 6},
		{7, 8, 9}
	};
	int (*pi)[MAX] = arrayInt;

	//以下输出arrayInt数组的第2行
	for (int i = 0; i < MAX; i++)
		printf("%d ", *(*(pi + 1) + i));

	putchar('\n');
	return 0;
}

二种

int *pi[MAX]; //由MAX个指向 int 的指针组成的数组,[]优先级高于*


使用如下:

#include 

#define MAX 3
int main(void)
{
	int arrayInt1[MAX] = { 1, 2, 3 };
	int arrayInt2[MAX] = { 4, 5, 6 };
	int * pi[MAX]; //包含三个指向int的指针
	pi[0] = arrayInt1; //令其中第1个指针pi[0]指向arrayInt1
	pi[1] = arrayInt2; //令其中第2个指针pi[1]指向arrayInt2

	//*(*(pi + 0) + 1) <==> pi[0][1]  两者等价
	for (int i = 0; i < MAX; i++)
		printf("%d ", *(*(pi + 0) + i ));
	putchar('\n');
	for (int i = 0; i < MAX; i++)
		printf("%d ", pi[1][i]);

	putchar('\n');
	return 0;
}

第三

char *ps[MAX]; //由MAX个指向char 的指针组成的数组,同样地[]优先级高于*

使用如下,可用于处理多个字符串数组:

#include 

#define MAX 3
int main(void)
{

	char *ps[MAX] = {
		"I'm",
		"learning",
		"C language"
	};

	for (int i = 0; i < MAX; i++)
		puts(ps[i]); //第i行字符串的首地址即为ps[i]

	putchar('\n');
	return 0;
}


第四

char (*ps)[MAX]; //指向含有MAX个字符元素的字符串数组

使用如下,可用来处理字符数组,不常用:

#include 

#define MAX 3
int main(void)
{
	char arrayChar[][MAX] = {
		{ 'a', 'b', 'c' },
		{ 'd', 'e', 'f' },
		{ 'g', 'r', 'y' }
	};
	char(*ps)[MAX] = arrayChar;

	//输出arrayChar字符数组的第2行
	for (int i = 0; i < MAX; i++)
		printf("%c ", *(*(ps + 1) + i));

	putchar('\n');
	return 0;
}
 
  


总之,C指针要想熟练掌握还得多用。






















你可能感兴趣的:(C,学习笔记)