這是一個濫用void*
ptr(這本身就是一個糟糕的編碼習慣)的樣本,但是當我查看內存細節時,它會變得很有趣。這個程序爲什麼輸出8589934593而不是4294967298?
#include <iostream>
using namespace std;
typedef struct {
long a;
void print() {
std::cout << a;
}
} st;
int main() {
int t[2] = {1,2};
void* p = t;
st* spt = (st*) p;
spt->print();
return 0;
}
由於long
是64位,並且int
是32位的,在t時的兩個整數,{1,2}
彌補了在struct
的long a
的空間。
但我的問題是,既然現在{1,2}
拼成a
,二進制內存走線應00000000000000000000000000000001 00000000000000000000000000000010
,這應該給其十進制格式4294967298
。但是,實際打印輸出爲8589934593
,即00000000000000000000000000000010 00000000000000000000000000000001
。看起來1
和2
的位置實際上是交換的。
這是怎麼發生的?
我想'00000000000000000000000000000001 0000000000000000000000000010'實際上是4294967298 – 2015-11-07 02:06:05
也許是因爲你的機器使用小端。 – MikeCAT
這似乎是[endianess]的一個問題(https://en.wikipedia.org/wiki/Endianness)。 – clcto