C++ 指针与一维数组名

打印 上一主题 下一主题

主题 909|帖子 909|积分 2727

C++ 将数组名解释为其第一个元素的地址,而对数组名应用地址运算符时,得到的是整个数组的地址。从数字上而言,这两个地址相同,无需区分;但从概念上特别是需要运用指针算术时,需要明白两者的区别。如下示例中假设 short 宽 2 字节,系统为 32 位,数组首地址为0x0028ccf0,指针变量 ptrptrc 的区别如下:

  • 变量 ptr 的类型是 short*,存储的是一个 2 字节内存块的地址,它指向的对象是 short 类型,记号 *ptrtacos[0] 等价。
  • 变量 ptrc 的类型是 short(*)[10],存储的是一个 20 字节内存块的地址,它指向的对象是包含 10 个元素的 short 数组,记号 *ptrctacos 等价。
表示 tacos、&tacos、&tacos[0] 的区别如下:

  • 数组名 tacos 和 &tacos[0] 等效,类型都为 short *,存储的是一个 2 字节内存块的地址,它们指向的对象是 short 类型,但在运用 sizeof() 时,这两者会有区别,sizeof(tacos)=20 而 sizeof(&tacos[0])=4。
  • 表示 &tacos 的类型为 short(*)[10],存储的是一个 20 字节内存块的地址,它指向的对象是包含 10 个元素的 short 数组。
[code]//声明并初始化数组short tacos[10] = {5,2,8,4,1,2,2,4,6,8};//声明并初始化指针一:以下几种赋值结果对ptr等效short *ptr = tacos;        //值为0x0028ccf0short *ptr = &tacos[0];    //值为0x0028ccf0//声明并初始化指针二short (*ptrc)[10] = &tacos;//值为0x0028ccf0//访问数组第三个元素cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

伤心客

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

标签云

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