多维数组下指针使用总结

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

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


第一种

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


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

#include <stdio.h>

#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 <stdio.h>

#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 <stdio.h>

#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个字符元素的字符串数组

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

<pre name="code" class="cpp">#include <stdio.h>

#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指针要想熟练掌握还得多用。






















  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值