指针数组和数组指针的区别

1. 名词解释

  • 指针数组:array of pointers, 即用于存储指针的数组,也就是数组元素都是指针
  • 数组指针:a pointer to an array,即指向数组的指针

2. 用法区别

  • int* a[4] 指针数组
    • 表示数组a中元素都是int型指针
    • *a[i]*(a[i])是一样的,因为[]优先级比*高
    • 元素表示:*a[i]
  • int (*a)[4] 数组指针
    • 表示指向数组a的指针
    • 元素表示:(*a)[i]

在实际中,对于指针数组,一般:

typedef int *pInt;
pInt a[4];

这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。

3. 代码演示

/*
 * @Author: sanjayzhong
 * @Github: https://github.com/sanjayzzzhong
 * @Date: 2019-10-09 22:02:38
 */
#include <iostream>

using namespace std;

void test01(){

    
    //对一维数组的应用
    int *a[5]; //指针数组 array of pointers
    int (*b)[5]; // 数组指针 a pointer to an array
    int c[5] = {1,2,3,4,5};
    //把数组分配给两者
    b = &c; //这里要取c的地址
    for(int i = 0; i < 5; ++i){
        a[i] = &c[i];
    }
    int *p = c;
    cout << sizeof(p) << endl;
    cout << sizeof(c) << endl;
    //随机查看结果
    cout << *a[1] << endl; //输出2就对
    cout << (*b)[1]  << endl;
    

    //对二维数组的应用
    int arr[3][4];
    int* pArray[3]; //指针数组
    //这里int *pArray[3] 表示一个一维数组内存放着三个指针变量,
    //分别是pArray[0]、pArray[1]、pArray[2]
    int (*aPointer)[4]; //数组指针

    //赋值
    for(int i = 0; i < 4; ++i){
        pArray[i] = arr[i];
    }

    aPointer = arr; 
    aPointer++; //从arr[0][] 到arr[1][]


}
int main(int argc, char *argv[]){
    test01();

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zedjay_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值