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)
你的假设是错误的.它将指针向前移动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
用于此目的.