数组指针和指针数组用法和功能

词组解析:

数组指针:我们可以这样记忆与理解,看词组最后两个字是指针,那么含义就是指向数组的指针。

指针数组:看词组的最后两个词是数组,那么含义是数组里面元素是指针的数组。

我们看代码可以更容易理解。

int a[3][4];
	int(*p)[4];//数组指针,p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为4个整型的数组。所以p是一个指针,指向一个数组叫指针数组。
//这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。
一个数组,叫数组指
	int *q[3];//指针数组
	p = a;
	for (int i = 0; i < 3; ++i)
	{
		q[i] = a[i];数组名一定不能放在左值
	}
	int a[3][4];//a(int(*)[4])a[i](int *) a[i][j](int)
	int b[10];//b(int *) b[i](int)

从二维数组来理解,首先先介绍几个概念。

  • 数组名代表数组首元素的首地址。
  • 数组的下标为什么从0开始?因为下标表示的是当前元素距首地址的偏移量。
  • 用树的方法来理解二维数组。
  • a[0]    
    a[1]    
    a[2]    

从代码中可以看到定义一个int(*p)[4];//数组指针,那么就可以指向p = a;p+1->a[1];

int *q[3];//指针数组,可以看到q是数组名,数组名是绝对不可以放到左值,因为它的地址空间已经占用,不能再赋值。

指针数组初始化方式可以是

for (int i = 0; i < 3; ++i)
	{
		q[i] = a[i];数组名一定不能放在左值
	}

可以单个赋地址值。

int *arr[10];
int *a[4];
int **arr[10];

以上这些都是指针数组,为什么 呢?首先 拿第一个为例,arr先与[10]结合成为一个数组,然后这个数组里存着10个元素,每个元素的类型为int*;第二个也一样。第三个的意思是arr与[10]结合成为一个数组,数组的元素类型为int**。总的来说就是存放指针的数组叫指针数组。它怎么用呢?如下:

int *arr[10] = {"123","world"};

 这里面因为存放的都是一个int型的指针,所以每个指针都可以指向一个字符串。

我们来加强深化一下

int a[3][4];二维数组

a 的类型是(int(*)[4])数组指针 

a[i]的类型是(int *)指针是每一行的首地址

a[i][j]的类型是(int)整型
 int b[10];一维数组

b的类型是(int *)指针(数组首元素的首地址) 

b[i]的类型是(int)整型

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值