二维数组那些事

#include<iostream>
using namespace  std;ios

int main(){c++

    //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个字节。spa

   //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;.net


}指针

image

相关文章
相关标签/搜索