指针数组和数组指针

//指针数组
char a[] = "1";
char b[] = "love";
char c[] = "you";
//指针数组  指针数组,本质上还是一个数组,数组的每一个元素类型都是指针
char* p[3];      //这是指针数组的形式
p[0] = a;
p[1] = b;
p[2] = c;
for (int i = 0; i < 3; ++i) {
    cout << p[i] << ' ';
}
cout << endl;

int mat[3][4] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
};
int* pmat[3];         //这里解释一下,以下的每一次定义都是对数组每一行的指向
pmat[0] = mat[0];
pmat[1] = mat[1];
pmat[2] = mat[2];
for (int i = 0; i < 3; ++i) {         
    for (int j = 0; j < 4; ++j) {        
        cout << *(pmat[i] + j) << ' ';       //这里地址偏移一下代表着同一行相邻的数组,最后打印出来的就是全部数组
    }cout << endl;
}

接下来是数组指针,本质上是一个指针,是一个指向数组的指针,也就是说他指向的是一个数组的地址。

int(*p)[5];    // 他的形式是这样的,他也就是比普通的指针多了一个[5],数组指针可以类比成一个二维数组

int main() {
    int(*p)[5];
    int a[4][5] = {      //这里的二维数组每一行只能有5个元素,因为上面已经定义了这个指针的列数是五
        {4,3,2,1,0},     //为什么是列数不是行数呢,因为指针会指向数组的每一行,而每一行的下一个数的地址都是相邻的  
        {9,8,7,6,5},     
        {6,7,8,9,0},
        {5,6,7,8,9}
    };
    p = a;
    cout << p << endl;
    cout << p + 1 << endl;   //这里我得到的结果A0和B4总共偏移了20个字节,20=4*5=sizeof(int)*5
    cout << *p << endl;      //这里得到的还是一个地址


    return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值