指针数组与数组指针

指针数组则是一个其中每个元素均为指针的数组;
数组指针则是一个指向数组的指针。
下面我们通过一个简单的例子来理解一下。
定义一个4*4的二维数组a[4][4]

#include<iostream>
using namespace std;

int main()
{
	int a[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
	
	// []的优先级要大于*,故相当于*(p1[4])
	// p1为指针数组,它有四个元素,每个元素是一个int *类型的指针,
	// 这些指针存放着其对应的首地址。 p1 的大小为16  
	int *p1[4] = {a[0],a[1],a[2],a[3]};  
	
	// p2是一个指向 int[4] 数组的指针 这里每个元素都是一个数组  数组指针
	// int (*p2)[4] = a[0] 是不对的 因为a[0]是数组首元素首地址  p2存放的是数组首地址
	// a[0]+1 将会加1  (p2+1) 将会加4
	// p2的大小为4
	int (*p2)[4] = a;
	
	 //同p1 是一个 指针数组  大小为16  
	int *(p3[4]) = {a[0],a[1],a[2],a[3]};
	 
	// p4是一个指向数组的指针 注意与p2的区别
	int *p4 = a[0];
	
	cout << sizeof(p1) <<endl;  
	cout << sizeof(p2) <<endl;
	cout << sizeof(p3) <<endl;
	cout << sizeof(p4) <<endl <<endl;
	cout << *(p1[3]+1) <<endl;  
	cout << *(*(p2+3)+1) <<endl;
	cout << *(*(p3+3)+1) <<endl;
	cout << *(p4+13) <<endl;
	cout << **(p2+1) <<endl;
	cout << *(a[0]+1) <<endl;
	system("pause");
	return 0;
}
运行结果:

运行结果

cout << p2 << endl;
cout << a << endl;
cout << *p2<< endl;
cout << p2+1<< endl;
cout << *p2+1<< endl;
cout << a[1]<< endl;
运行结果:

在这里插入图片描述
可以看出来p2相当于a,p2指向二维数组的第一行的首地址,*p2指向第一行第一列,二者相同,但p2+1将会指向第二行的首地址,*p2+1将会指向第一行第二列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值