#include <iostream>
#include <string.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <map>
#include <set>
using namespace std;
int main(int argc, char* argv[])
{
const int i = 0x61626364;
printf("%x\n", *(char*)&i); //這里顯示64,因?yàn)閘ittle endian的原因,little代表LSB,endian代表變量所存放的內(nèi)存的起始端,即內(nèi)存的低地址
printf("%x\n", i);//61626364
const char* pp = "abcd"; //這在內(nèi)存里從低地址到高地址依次存的真的是abcd,而之前定義的int i,在內(nèi)存里從低地址到高地址依次存的卻是dcba
printf("%x\n", *(int*)pp);//64636261
wchar_t a=L'我';//wchar_t其實(shí)就是unsigned long, 注意,這里必須加前綴L,加L代表該字符是UNICODE,否則編譯會(huì)報(bào)warning(gcc會(huì)認(rèn)為這樣的寫(xiě)法和'abc'一樣邪惡), 這里的賦值其實(shí)就相當(dāng)于unsigned long a = 0x6211
printf("%x\n", a);//6211
printf("%x\n", *(char*)&a);//這里顯示11,因?yàn)槲业腢NICODE編碼是6211
cout << sizeof(a) << endl; // 4
//const char* pW = L"我"; 編譯會(huì)報(bào)錯(cuò),因該用const wchar_t* pW = L"我";
const char* p = "我"; //這個(gè)char序列存放的依次是e6, 88, 91, 我的utf8編碼是e68891,這是因?yàn)楫?dāng)前使用的編輯器vi設(shè)定了utf8編碼
cout << strlen(p) << endl; //3
printf("%x++\n", p[0]); //e6
printf("%x\n", *(int*)p);//最終顯示為9188e6, %x代表將一個(gè)int的數(shù)值以十六進(jìn)制的形式顯示出來(lái),由于little endian的原因,在提取一個(gè)int的時(shí)候,會(huì)從內(nèi)存的開(kāi)始連續(xù)取4個(gè)btype,并且將最后一個(gè)byte最為int的MSB(即LSB放在前內(nèi)存前端,MSB放在內(nèi)存后端)
const char* p2 = "abcd";
printf("%x\n", *(int*)p2); //dcba
return 0;
}