添加到数组指针

时间:2018-10-20 21:17:32

标签: c++ pointers

因此,我最近遇到的事情对我来说并不是很直观,让我有些困惑。如果我像这样在堆上分配一个数组:

uint32_t* Array = new uint32_t[5];

,然后尝试像这样向数组指针添加一定数量的字节:

Array + 3

结果将是Array + sizeof(uint32_t) * 3,而不是Array + 3

为什么要这么做?

1 个答案:

答案 0 :(得分:0)

Additive operators (§7.6.6/4) [expr.add]/4

  

将具有整数类型的表达式 J 添加或减去   从指针类型的表达式 P 中,结果的类型为 P

     
      
  1. 如果 P 评估为空指针值,而 J 评估为0,则   结果是空指针值
  2.   
  3. 否则,如果 P 指向具有 n 个元素的数组对象 x 的元素 x [i] ,表达式 P + J J + P (其中 J 的值为 j )指向(如果 0≤i + j≤n 并且表达式 P-J 指向(如果 0≤i − j≤n ,则可能是假设的元素 * x [i-j]
  4.   
  5. 否则,行为是不确定的。
  6.   

Subscripting (§7.6.1.1/1) [expr.sub]/1

  

后缀表达式后跟方括号的表达式是   后缀表达式。表达式之一应该是类型的glvalue   “ T的数组”或“ T的指针”类型的prvalue,另一个应为   是无作用域枚举或整数类型的prvalue。结果是   类型“ T”。类型“ T”应为完全定义的对象类型。    E1 [E2] 表达式(根据定义)与 *((E1)+(E2))相同,   除了在数组操作数的情况下,结果是左值   如果该操作数是左值,则为x值。表达方式    E1 在表达式 E2 之前排序。