二维数组那些事

#include<iostream>
using namespace  std;

int main(){

    //const char[12]类型的值不能用于初始化char [4]
    //char array[3][4]={"hello world"};


    char array[3][4]={'h','e','l','l','o'};
    //*array输出的结果是hello,即*array表示的是char*类型,而*array+1的输出是ello
    cout<<&array<<" "<<&array+1<<" "<<*array<<" "<<*array+1<<endl;  //&array+1相比&array向后偏移了12个字节。

   //c++中,char* 在所有的指针类型中比较特殊。
    int arrayInt[3][4]={12,13,14,25,34,23,33};
    cout<<arrayInt<<endl;
     //输出两项结果相同,相比整个数组首地址偏移16个字节,说明单独的二维数组名是一个int (*)[4]类型
    //下面第一项是获得二维数组中第二个一维数组的地址,而第二项是获得第二个一维数组首元素的地址。???
    //对数组指针引用如何理解
    cout<<arrayInt+1<<" "<<*(arrayInt+1)<<endl; 
    //第二项的输出说明&arrayInt表示的整个二维数组的长度。
    //第三项的输出与第一项的值相同,但意义不同,第一项表示的是整个数组的首地址,第三项表示的是数组首元素arrayInt[0]的地址,是一个int*
    //第四项的值为第3项的值向后偏移4个字节(1个元素)
    //第五项先获取二维数组中第二个一维数组的首地址,&arrayInt[1]的类型是int (*)[4],然后加1,
    //地址相对于整个数组首地址偏移32个字节。(4*4+4*4)
    //要理解第四项,记住*又称为解引用,*arrayInt之后表示arrayInt的第1个元素int*
    //一维数组int a[],数组名*a表示所在地址基类型的值。二维数组中*(int(*)[])获得其中内层第一个数组。之后全部转化到一维数组的范畴。
    cout<<&arrayInt<<" "<<&arrayInt+1<<" "<<*arrayInt<<" "<<*arrayInt+1<<" "<<&arrayInt[1]+1<<endl;
    //要理解二维数组的事情,类比一维数组进行理解。一维数组中&arr表示一个数组指针,arr表示int*
    cout<<arrayInt[1]+1 <<endl;   //偏移20,下标运算符获取第N个元素,这里是获取2个元素,即一个一维数组,整个数组是用其首地址来表征的。
    getchar();
    return 0;


}

image

转载于:https://my.oschina.net/ray1421/blog/685092

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值