【指针数组】和【数组指针】的简单理解

【指针数组】和【数组指针】的简单理解

下面给出指针数组和数组指针的简单的定义,并同时给出其他类型的定义,方便对比理解。

  1. 指针数组:是一个数组,数组里面存的元素类型是指针:
#整型数组
int arr[10] = {0};

#字符数组
char arr[10] = {0};

#指针数组
int* arr[10] = {0};		#整型指针数组:存整型类型定义的指针的数组
char* arr[10] = {0};	#字符指针数组:存字符类型定义的指针的数组

  1. 数组指针:是一个指针,存的是数组的地址:
#整型指针
int a = 10;
int* Pa = &a;

#字符指针
char a = "abcd";
char* Pa = &a;


##数组指针中:首个元素是指向的数组的类型,第二元素是指针名称,第三个元素是指向的数组的大小。比如:
int*            (*Parr)     [10]
指向的数组类型---指针名称---指向的数组大小

## int* (*Parr) [10]:为什么要在(*Parr)外面写括号,是因为不写括号(int**Parr[10])就变成了数组,不再是指针。


数组指针
int arr[10] = {0};
int (*Parr) [10] = &arr;	#整型数组指针:指向整型类型定义的数组的指针

char arr[10] = {0};
char (*Parr) [10] = &arr;	#字符数组指针:指向字符类型定义的数组的指针

int* arr[10] = {0};
int* (*Parr) [10] = &arr;		#整型指针数组指针:指向数组的指针,这个数组类型是存储整型指针

char* arr[10] = {0};
char* (*Parr) [10] = &arr;		#字符指针数组指针:指向数组的指针,这个数组类型是存储字符指针

下面给个使用数组指针的实例:

//取数组名代表首元素地址,但在二维数组里面是首行的地址,也就是{1, 2, 3, 4, 5}的地址。
//所以变量可以定义为数组指针,定义指向这个数组地址的指针
void print_two(int (*Parr) [5], int x, int y)
{
	int i = 0;
	for(i = 0; i < x; i++)
	{
		int j = 0;
		for(j = 0; j < y; j++)
		{
			//第一次解引用是将地址转换成数组;
			//第二次解引用是因为数组名本身是首元素地址,取元素需要进行解引用。
			printf("%d ", *(*(Parr + i) + j));
			//也可以按下面这行来写
			//printf("%d ", (*(Parr + i))[j]);
		}
		printf("\n");
	}
}
int main()
{
	int arr[3][5] = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7}};
	print_two(arr, 3, 5);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值