c ++通过移动指针在数组中导航

Ski*_*kip 1 c++ arrays pointers

在下面我预计将打印13.
我想通过一个数组成员的大小(即int)来移动arr(这是一个指向内存的指针,其中存储了数组中的int值,如果我理解了一切).

而是打印45.因此,检索第五个Array成员进行一个数组成员范围的跳转.为什么?

int arr[] = {1,13,25,37,45,56};
int val = *( arr + 4 );         //moving the pointer by the sizeof(int)=4
std::cout << "Array Val: " << val << std::endl;
Run Code Online (Sandbox Code Playgroud)

chr*_*ris 9

你的假设是错误的.它将指针向前移动4个元素,而不是前面4个字节.

*(arr + 4)就像在那个逻辑中说的那样*(arr + 4 * sizeof (arr [0])).

该陈述*(arr + 4)相当于arr [4].然而,它确实有一些简洁的语法,因为*(4 + arr)同样有效,意思是这样4 [arr].

您的行为可以通过以下示例实现:

#include <iostream>

int main()
{
    int a[3] = {65,66,67};
    char *b = reinterpret_cast<char *>(a);
    std::cout << *(b + sizeof (int)); //prints 'B'
}
Run Code Online (Sandbox Code Playgroud)

我不建议reinterpret_cast用于此目的.