蒂達文翻譯

char mem_1[2]; // 2bytes

};

熟習 pointer 的程式師會知道,上面 翻譯 array[] 寫法是沒用 翻譯,因為誰人 const 是形容 (char *) ,所以 array[] 照舊會擺在 ram 裡面,要改成下面才行 翻譯社

mem_1, mem_2

mem_1, mem_2

char code * code array[] = { // 4bytes in ram????

mem_1 翻譯公司 mem_2

char mem_2[2];

char const mem_2[2]; // 2bytes in rom

};

};

};

};

8052 為 16bit address ,照事理 array[] 應當只佔 2*2=4bytes ,怎麼會釀成 6bytes 呢?因為 8052 內部記憶體分成好幾塊,每塊都是自力,必然要透過指令才能進行搬移,可是 c 說話並沒有針對這類佈局做設計,所以只好再用 1byte 來做標籤,所以可以想像,一個 [*ptr=5] 會翻出多少指令,這是寫 PC 或 ARM 的程式設計師沒法想像的處所。

char *array[] = { // 6bytes ????

char const * array[] = { // 6bytes in ram????

char *array[] = {

其實和const很像。

char code mem_2[2]; // 2bytes in rom

第一個 code 告知 compiler array[] 的內容是 " 指向 rom" 的 pointer。

改成下面,多加一個 const ,才是准確的型別