C++ 指针与二维数组名

宁睿  金牌会员 | 2022-9-17 08:41:03 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 965|帖子 965|积分 2905

和一维数组类似,C++ 将二维数组名解释为其第一个元素的地址,而二维数组的第一个元素为一维数组,以下面的程序为例,二维数组名 array2d 和 &array2d[0] 等效,它们的类型都为 short (*)[5];对数组名应用地址运算符时,得到的是整个数组的地址,它的类型为 short (*)[5][5],假设 short 宽 2 字节,系统为 32 位,数组首地址为0x00BCF8FC,例子中几种表示的区别为:

  • 数组名 array2d 和 &array2d[0] 等效,类型都为 short (*)[5],存储的是一个 10 字节内存块的地址,它们指向的对象是包含 5 个元素的 short 数组,但在运用 sizeof() 时,这两者会有区别,sizeof(array2d)=50 而 sizeof(&array2d[0])=4。
  • 表示 &array2d 的类型为 short (*)[5][5],存储的是一个 50 字节内存块的地址,它指向的对象是 5 行 5 列的二维 short 数组。
  • 表示 &array2d[0][0] 和 array2d[0] 等效,类型都为 short *,存储的是一个 2 字节内存块的地址,它指向的对象是 short 类型数据,但在运用 sizeof() 时,这两者会有区别,sizeof(&array2d[0][0])=4 而 sizeof(array2d[0])=10。
  • 类型 short **,存储的是一个 4 字节内存块的地址,它指向的对象是 short* 类型数据。
[code]//声明并初始化数组short array2d[5][5] = {{5,2,8,4,1},                       {2,2,4,6,8},                       {1,5,8,9,4},                       {5,7,6,2,5},                       {7,6,5,8,1}};//声明并初始化指针一:以下几种赋值结果对ptra等效short (*ptra)[5] = array2d;     //方式一:值为0x00BCF8FCshort (*ptra)[5] = &array2d[0]; //方式二:值为0x00BCF8FC//声明并初始化指针二short (*ptrb)[5][5] = &array2d; //值为0x00BCF8FC//声明并初始化指针三:以下几种赋值结果对ptrc等效short *ptrc = &array2d[0][0];   //方式一:值为0x00BCF8FCshort *ptrc = array2d[0];       //方式二:值为0x00BCF8FC//声明并初始化指针四:以下几种赋值结果对ptrd等效short *ptrTmp[5] = {array2d[0],array2d[1],array2d[2],array2d[3],array2d[4]};short** ptrd = ptrTmp;          //方式一:值为0x00BCF8A4short** ptrd = new short*[5]{    array2d[0],    array2d[1],    array2d[2],    array2d[3],    array2d[4]};                //方式二:值为0x01156470,需配合使用delete[]释放内存short** ptrd = new short*[5]();ptrd[0] = array2d[0];ptrd[1] = array2d[1];ptrd[2] = array2d[2];ptrd[3] = array2d[3];ptrd[4] = array2d[4];           //方式三:值为0x01046AE0,需配合使用delete[]释放内存//访问数组第3行第4列的元素cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表