a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 牛人業話 > 掌握C語言必知要點(續)

掌握C語言必知要點(續)

作者:areak 時間:2014-12-01 來源:電子產品世界 收藏

  8、邊界對齊

本文引用地址:http://www.j9360.com/article/266192.htm

  CPU在單位時間內(同一時間)能一次處理的二進制數的位數叫字長。處理字長為8位數據的CPU通常就叫8位的CPU, 當前的CPU大部分是32位的CPU,如果某臺機器的字長為4個字節(也就是32位),那么下面的結構體會占用多少內存空間呢?

  struct StrA{

  int a;

  char b;

  short c;

  char d;

  };

  如果你的答案是12字節,恭喜你!答對了。這個結構在內存中的存儲如下圖所示:

  a為int型,占4個字節(0-3),b為char型,占一個字節(4),c就要注意了,short型占2個字節,但是不能從5號位存儲,偏移量必須為2的整數倍位置,所以,從6號位置開始,占據6和7號位,d為char型,只需占用8號位即可,但是由于機器字長為4個字節,當下一個結構存儲時,不能從9號位開始,需從12號位開始,也就是說9、10、11號位也被浪費掉。

  簡單來說可以這樣算,在成員變量所占字節數和機器字長中選擇小的一個,并按該字節數對齊,比如c占2個字節,那么在存儲它時,就按2字節對齊,存儲c的位置必須是2的整數倍,b和d占1字節,按1字節對齊,所以實際上結構體共占用了9個字節,最后一步,需要按照機器字長進行圓整,因為字長為4字節,所以結構體占用字節數必須為4的整數倍,最終占了12字節的內存。

  再看下面這個例子,占用了多少字節呢?

  struct StrB{

  int a;

  short c;

  char b;

  char d;

  };

  答案是:8個。兩個結構存儲的內容完全相同,知識調整了成員b和c的順序,但是卻節省了33%的空間。

  9、再說

  Static可以用來修飾全局變量、局部變量和函數。下面注意來講述:

  (1)被修飾的全局變量稱為靜態全局變量,它與普通全局變量的區別在于,“普通全局變量穿上外衣后,它就變成了新娘,已心有所屬,只能被定義它的源文件(新郎)中的變量或函數訪問。”而其它文件內的函數是無法訪問它的。

  (2)普通的局部變量在棧空間上分配,這個局部變量所在的函數被多次調用時,每次調用這個局部變量在棧上的位置都不一定相同。而且只有當函數被調用時普通局部變量才被創建,函數調用完畢則銷毀。

  被static修飾的局部變量稱作靜態局部變量,它雖然是局部的,但是在程序的整個生命周期中存在。和局部變量一樣,只能在函數內部訪問,不能被其他函數和源文件訪問,靜態局部變量如果沒有被用戶初始化,則會被編譯器自動賦值為0,因為其不會被銷毀,所以以后再調用靜態局部變量的時候都用上次修改過后的值。

  (3)當函數被static修飾后,就只能被當前文件中的被訪問,即使其它文件中含有相同名稱的函數,也不會發生沖突。所以它很好地解決不同原文件中函數同名的問題。

  10、函數數組

  數組名是數組的第一個元素在內存中的地址,函數名是執行這個函數任務的代碼在內存中的起始地址。函數可以指向函數的起始地址,因此函數名可通過函數加以保存。那么也能夠定義一個數組保存若干個函數名,這就是函數指針數組。但是這若干個需要通過函數指針數組保存的函數必須有相同的輸入、輸出值。

  函數指針數組用在這種情況下,當我們要根據一個變量值來決定執行某個函數時,我們可以使用switch-case語句來做,可是當要處理的情況較多時,比如100種情況,那就需要寫100個case來選擇,但是你大可不必這樣做,這時候函數指針數組就派上用場了。具體如何使用呢,舉例如下:

  首先要定義100個函數:

  Int Func1(int,int);

  .

  .

  .

  Int Func100(int,int);

  其次定義函數指針數組,并給數組賦值。

  Int (*func[100])(int,int)={ Func1,Func2,…Func100};

  最后,根據變量var的值來決定執行那個函數,并將執行結果返回給result。

  Result = func[var](var1,var2);

  根據var從數組中選擇正確的函數指針,并調用相應函數來執行,代碼量大大減少,執行效率較高。

  C的指針很靈活,對指針的限制也較少,所以程序員在使用指針時需加倍小心。Pascal語言的指針哲學:“使用錘子可能會傷到你自己,所以我們不給你錘子”。而則是:“給你錘子,實際上你可以使用好錘子,祝你好運!”。

  So, good luck!!!

c語言相關文章:c語言教程




關鍵詞: C語言 static 指針

評論


相關推薦

技術專區

關閉