【非专业浅谈】一、二维数组、指针数组、数组指针的含义以及使用(防备忘)

一维数组

含义

  • 这个比较基础,顾名思义即可。
  • 定义 int p[5]; 数组包含5个元素,每一个元素都是int型的数据。
  • 1

用法

  • 如何用指针去表示它?
  • 我们知道,数组名即为指向数组的指针,这样说也可以,但不是很准确。
  • 例如,上面的数组名p,p只是指向了p[0]这个数据的指针,p+1指向了p[1]这个数据的指针…之后的以此类推即可。
  • 那么,我们想要用p这个指针如何取到数组中的int数呢?
  • 就是这样:*p即p[0] ,(p+1)即p[1],(p+2)即p[2]
	int p[3] = {0 ,5, 9};
	int *a = p;   //注意用什么样的指针去指向该数组
	
	for(int i = 0; i<3; i++)
	{
		cout<<*(a+i)<<endl;
	}

/*输出
0
5
9
*/

指针数组

含义

  • 指针数组,看这四个字,归根到底,还是个数组。
  • 那么数组里面每一个元素装的是什么呢?是一个指针。
  • 定义int *p[5]; 数组包含三个元素,每一个元素都是一个指向int型的指针。
  • 在这里插入图片描述

用法

  • 如何用指针去表示它?
  • 其实与上边的普通数组是一个道理,数组名即为指向数组的指针,这样说也可以,但不是很准确。
  • 看到上边的图,你也应该理解什么意思了。p为数组名,p是一个指针,它指向了指针数组的第一个元素,p+1指向了指针数组的第二个元素…以此类推即可。
  • 这里注意下,这里拿p指针举例子,p指向的是p[0],而p[0]里面存储的是一个指针呀!所以*p的值并不是“洋葱最里面的那一层(希望你能懂)”,故*p仍旧是一个指针,即*p这个指针是与p[0]里面存储的指针是相同的。
  • 所以,我们想找到“洋葱最里面的那个数据”,应该如何啊?拿数组中第一个数据举例:应该为 **(p+0)或**p或*p[0]
    int array[3];
   	int *a=&array[0],*b=&array[1],*c=&array[2];
	*a = 6;
	*b = 7;
	*c = 8;
	
	int *p[3] = {a, b, c};
	int **q = p;  //注意用什么样的指针去指向该数组
				 //这样赋值之后呢,p与q等价,即下面的p与q可以互换
	
	for(int i = 0; i < 3; i++)
	{
		cout<<**(q+i)<<endl;
        cout<<*q[i]<<endl;  //这个怎么理解,我们可以将中括号[ ]当作与一层解指针
	}
/*输出
6
6
7
7
8
8
*/

二维数组 | 数组指针

含义

  • 二维数组,即形如 int array[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
  • 这个二维数组这家伙呢,说白了就是由n个一维数组组成的
  • 例如上边的中二数组,就是由3个int a[4]的一维数组组成的;
  • 数组名即为指向数组的指针,这样说也可以,但不是很准确。即array或array[0]是一个指向其第一行一维数组的指针,array[1]是一个指向其第二行一维数组的指针…以此类推
  • 然后再说说这个数组指针,数组指针,归根结底,它是一个指针,而且是一个指向数组的指针。
  • 例如,int (*p)[4]; 即p是一个指向具有4个int型元素的一维数组的指针。
  • 所以,二维数组与数组指针显然可以联系起来。
  • 在这里插入图片描述

用法

    int array[3][4] = {{1,2,3,4},
                       {5,6,7,8},
                       {9,10,11,12}};
    int (*p)[4] = array;

    for(int i = 0; i < 3; i++ )
    {
        for(int j = 0; j < 4; j++)
        {
            cout<<*(*(p+i)+j)<<endl;
            cout<<*(p[i]+j)<<endl;
        }
    }
/*输出
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋山刀名鱼丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值