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

时间:2012-04-24 22:08:16

标签: 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;

3 个答案:

答案 0 :(得分:8)

你的假设是错误的。它将指针向前移动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'
}

我不建议将reinterpret_cast用于此目的。

答案 1 :(得分:4)

arr + 4将从数组的起始地址给出4个项目,而不是4个字节。这就是为什么你得到45这是第0项加上4。

答案 2 :(得分:0)

执行指针运算。请参阅:http://www.eskimo.com/~scs/cclass/notes/sx10b.html

arr是你的数组,它会分解为第一个元素arr[0],它将是1,然后你+ 4分配给它,它将指针移动4个元素{{ 1}}所以它现在指向arr[4]