注意:此问题已重命名并缩小,以使其更具针对性和可读性.大多数评论都涉及旧文本.
根据标准,不同类型的对象可能不共享相同的存储位置.所以这不合法:
std::array<short, 4> shorts;
int* i = reinterpret_cast<int*>(shorts.data()); // Not OK
Run Code Online (Sandbox Code Playgroud)
但是,该标准允许此规则的例外:可以通过指向char或的指针访问任何对象unsigned char:
int i = 0;
char * c = reinterpret_cast<char*>(&i); // OK
Run Code Online (Sandbox Code Playgroud)
但是,我不清楚这是否也允许反过来.例如:
char * c = read_socket(...);
unsigned * u = reinterpret_cast<unsigned*>(c); // huh?
Run Code Online (Sandbox Code Playgroud) 我应该创建一个变量
long long hex = 0x1a1b2a2b3a3b4a4bULL;
Run Code Online (Sandbox Code Playgroud)
然后定义指向1a1b,2a2b,3a3b和4a4b的4个指针.然后我打印那些双字节的地址和值.
我的方法是创建一个指针
long long *ptr1 = &hex;
Run Code Online (Sandbox Code Playgroud)
然后使用指针算法来获取下一个值.我意识到增加这个指针会增加长字节,而不是像我需要的那样增加2个字节.创建一个短指针
short *ptr1 = &hex;
Run Code Online (Sandbox Code Playgroud)
是我需要的,但我的编译器不会让我,因为数据类型不兼容.我该如何解决这个问题?有没有办法创建一个递增2个字节的指针并将其分配给更大数据类型的变量?