C++指针详解3_指针数组与数组指针

本节主要内容

  • 指针数组与数组指针
  • 多维数组指针差异


指针数组

顾名思义,一个数组内存储的都是指针那么他就是一个指针数组;
指针数组具有如下特性:

  1. 指针数组中存储的指针可以指向同类型的数组或者单个数值
  2. 指针数组可以延后初始化(而普通数组必须在声明时执行初始化分配内存空间)
  3. 使用malloc对指针数组中元素分配内存时,sizeof的对象应该是该指针数组所使用的数据类型
// 声明一含有5个指针的指针数组
int *arr[5];

// 执行五次,每次为一个元素分配内存以及填入数值
for(int i=0;i<5;i++){
    *(arr+i) = (int*)malloc(sizeof(int));
    **(arr+i) = i;
}

对以上代码的解释:
*(arr+i) 表示取出数组元素,实际上还有一种简化写法arr[i];
**(arr+i) 因为指针数组内元素是一个指针, 所以我们需要再次对数组元素解引用才可以对其赋值


多维数组取指针差异

一维数组的指针易于理解,而多维数组的指针会呈现出逐层嵌套的关系,依托以下代码,我们对其做出简要的解释

int arr[3][3] = {
    {1, 2, 3}, {4, 5, 6}, {7, 8, 9}
};
printf("%d\n",**arr);		// 输出1
printf("%d\n",*arr[0]);		// 输出1
printf("%d\n",arr[0][0]);	// 输出1
  1. arr是一个二维数组,每一维度存放3个元素
  2. arr = &arr[0]
  3. *arr = &arr[0][0]
  4. **arr = arr[0][0]
  5. 要明白这么个事实:只有第一维度才存储实际值,第二维度存储的都是第一维度的指针!
    也就是说 arr[0] = &arr[0][0]
  6. 所以如上图所示的代码结果均为1,即数组中的第一个元素

数组指针

指向一个多维数组我们就需要使用数组指针,下面的代码指示为多维数组mat取了个别名p1,我们对p1的使用就相当于对mat的使用

注意数组指针的书写语法,他省略了原数组的第二维度元素定义,改为使用指针替代,但是保留了第一维度元素定义

int mat[][2] = {{1,2},{4,5},{6,5}};
int (*p1)[2] = mat;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zhillery

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

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

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

打赏作者

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

抵扣说明:

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

余额充值