【转载】C++数组指针和指针数组的区别

原文地址:https://www.namidame.tech/Array_pointer_and_Pointer_Array.html

在C++中数组指针和指针数组是两种不同的语法,两者的定义方式是不同的
数组指针定义:

int (*p1)[4];

指针数组定义

int *p2[4];
  • 数组指针:是指针,括号括起指针名和星号,即指向一个数组的指针
  • 指针数组:是数组,指针名不带括号,即内容为指针的一个数组

示例:

# include <iostream>
using namespace std;

int main()
{
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int (*p1)[4];
    p1 = (int(*)[4])a;  // 数组指针
    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            cout << p1[i][j] << ' ';
        }
    }
    cout << endl;

    int *p2[4]; // 指针数组
    for(int i = 0; i < 3; i++)
    {
        p2[i] = &a[i][0];
    }
    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            cout << p2[i][j] << ' ';
        }
    }
    cout << endl;    
}

输出:

1 2 3 4 5 6 7 8 9 10 11 12 
1 2 3 4 5 6 7 8 9 10 11 12

从代码可以看出,数组指针和指针数组都可以用来操作二维数组,而用法上稍有差异。
在定义时两者者指定了二维数组的第二维的大小,本例中是一个4项的一维数组,而这样的一维数组有3个,组成了一个3行4列的二维数组。

  • 初始化数组指针时只需要将二维数组的基地址,即a,转化为数组指针类型再赋值
  • 而初始化指针数组需要将数组的每一项赋值成每一个一维数组的基地址,即&a[i][0]

在读取方法上两者是一样的,都可以用p[i][j]这样的方式来读取某一行列索引下的值。

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者: 你很德布罗意
邮箱: namidame@sina.cn
博客地址: https://www.namidame.tech/
原文地址: http://www.namidame.tech/Array_pointer_and_Pointer_Array.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值