程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言入門知識 >> linux C中重要的數據結構——結構體

linux C中重要的數據結構——結構體

編輯:C語言入門知識

  如大家所知,Linux kernel是由C語言和少部分匯編實現的,如此龐大的系統,要用面向過程的C語言來實現,怎樣才能保證系統組織的清晰與正確性?其實,雖然C語言沒有封裝對象這種數據結構,但是他卻有個更靈活的東西——機構體。這家伙身經百戰,能屈能伸,應對了所有需要對象出場的情況,在內核中隨處可見,就是由他來扮演著對象的角色。

         結構體,顧名思義,就是結構化的來組織一些數據結構,那麼對象是要封裝數據和操作的,只用來組織數據結構,那函數呢?你忽略了C語言的強大在於它的指針,熟練的應用指針能給程序帶來數量級的效率的提升。但他的不安全又是java棄之而去的本源。指針是C的基本數據結構之一,而struct就是用來組織基本數據結構使之形成滿足應用需求的封裝結構體的,當然可以包含指針元素,另外,c又是支持函數指針的,那麼,struct沒有理由不可以包含函數指針,所以,struct通過包含函數指針的形式封裝了數據相關的操作,從而完成了在C語言層面對“對象”這一數據結構的抽象。真的很強大。

           好的,知道了結構體的牛X,就要掌握它的應用,我們的目標就是去掌握最牛X的東西,從而使得自己也牛X起來。縱使我們現在還是小白、小菜,積累的多了,沉澱的就多了。小白還會抓小雞雞、小菜也會茁壯成長……那麼struct還是有一些應用技巧的,因為是對基本數據結構的組織和封裝,而數據結構,數據麼,就要牽涉到內存,就要牽涉到內存的分配。而內存的分配就會涉及到對齊,為了讓我們的程序達到最優,這個struct中的字節對齊問題你必須要了解一些:
你學要看這篇文章》》》》》【字節對齊】 ,一定要看,不看是你的損失。

         下邊是今天看博客時發現的一篇與struct有關的一些操作符的優先級問題,這個是不可多得的,必須提出來說明一下的下邊是內容:
【原文地址】

view plain
在所有運算符中,下面4個運算符的優先級是最高的:結構體運算符“.”和“->”、用與函數調用的“()”以及用於下標的“[]”,因此它們同操作數之間的結合也最緊密。 
 
例如對: 
 
struct { 
int len; 
char *str; 
}*p; 
 
表達式 
++p->len :增加len的值,其中的隱含括號關系是++(p->len) 
(++p)->len: 先執行p的加1操作,再取len的值 
(p++)->len: 先取len的值,再執行p的加1操作 
*p->str: 取指針str所指向的對象的值 
*p->str++:先取指針str所指向的對象的值,然後將str加1 
(*p->str)++:先取指針str所指向的對象的值,然後將對象值加1 
*p++ ->str:先取指針str所指向的對象的值,然後將P值加1 

作者“dreambegin 的 CSDN”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved