解決這個問題前,先知道一下C說話的定名邏輯,若是我沒有記錯,C說話是【前面的】形容【後面的】,【後面的優先被compiler處理】,例如:
有一塊記憶體叫p3 翻譯社....(1)
p3對照希奇,放在FLASH內,指到RAM,究竟如許有什麼用呢?例若有一個動態字串要顯示,很顯著的,內容要放在RAM,程式固定在某個處所抓資料,所以位址存在FLASH內便可,可以省點RAM的空間,也許有人認為才2個bytes有什麼好省 翻譯,然則如果是顯示多國說話字型,有很多多少的pointer要存,就有差別了 翻譯社
可以想一想看,若是字型資料是放在NAND FLASH,HDD,乃至是SD CARD中,那該怎麼辦呢?
怎麼用呢?以上面誰人多國語言字型為例,一般來講,字型資料是點矩陣資料,一定是放在FLASH內,所以要寫出一個embedded程式可以自由控制變數該放哪裡,要會做這些瑣事,不要過度依靠compiler預設動作,那是不可靠的,乃至是兩顆星星以上 翻譯pointer都要會,連void*也要會。
有一塊記憶體叫p1。....(1)
有一塊記憶體叫p2 翻譯社....(1)
以一個沒有迥殊設定 翻譯compiler來說
注重【整個器材】,例如(3)式,它的所謂整個器材,是包括(2)(1)的,其餘類推 翻譯社
int var;
p1會放在【RAM】內,它指到某個【16bit】的地方,阿誰處所在【FLASH】。 int * const p3; (3)這【整個工具】是int (1)這【全部工具】是pointer,p2預設放在RAM...(2) 假定此時用一個16bit address 翻譯cpu,有RAM,有FLASH,假設int是指16bit變數,const是指FLASH的空間,留意這不是絕對。 (1)這【全部東西】是const,p3放在flash...(2) (2)這【全部器材】是int...(3) 所以看一下另外一個宣佈: int const * p2; 別的當一顆星星(pointer)泛起的時刻,還沒有特別告知compiler型態,此時就會以預設值替換,一般來說【預設值是ram】,注重有些cpu比較複雜,就不會只有ram如許單純,多是internal sram、external 16bit ram或是external sdram這些比力複雜的可能性發生。 int * const p3; const int * p1; (3)這【全部工具】是int
知道是什麼意思了吧!p4會放在FLASH內,它指到 翻譯某個16bit的處所,誰人處所是flash。
給個結論,p1與p2的功能會一樣。
int const * p2;
上述 翻譯意思就是:【有一塊記憶體叫var,它 翻譯型態是int】,這個根基邏輯知道後,就能夠解答前面的問題了。
p3會放在【FLASH】內,它指到的某個【16bit】 翻譯處所,誰人處所是【RAM】。
(2)這【全部器械】是pointer...(3)
(3)這【全部東西】是const
【int const * const p5】,所以p5功能同p4。
const int * p1;
(2)這【整個器材】是const...(3)
p2會放在【RAM】內,它指到【FLASH】內的某個處所,誰人處所是【16bit】。
const。-> 翻譯社|,-> 翻譯公司|的-> 翻譯 int * const p4;
p1 翻譯公司p2,p3究竟不同在哪裡呢?這個處所課本也不太講,網路上也有一些奇異 翻譯解釋,我的紛歧定對,只是一個觀念罷了 翻譯社
(1)這【全部器材】是pointer,p1預設放在RAM...(2)
引用自: http://blog.udn.com/cchahacaptain/2558760有關翻譯的問題歡迎諮詢華頓翻譯社
留言列表