嵌入式C基礎知識學習(四)

2021-10-19 05:31:52 字數 2725 閱讀 9616

c/c++的結構體傳參可以有三種方式:

1、傳遞結構體變數,值傳遞

2、傳遞結構體指標,位址傳遞

3、傳遞結構體成員,可是值傳遞也可以是位址傳遞

根據**示例:

1 #include2 #define commandlength 100

3 using std::cout;

4 using std::endl;

5 //注意 c和c++中struct和typedef struct有區別。

6 struct messagemessage;

11 //c++中結構體可在類中建立也可在類外建立,使用時區別就是在類中需要用類的物件去呼叫。

12 13 class newmessage;

19 20 void main()

21 31

32 inline message newmessage::deliver(message stu)

33

補充:函式的執行結果會將結構體的變數值成功修改!
2.傳遞結構體指標,位址傳遞

1 #include2 #define commandlength 100

3 using std::cout;

4 using std::endl;

5 //注意 c和c++中struct和typedef struct有區別。

6 struct messagemessage;

11 //c++中結構體可在類中建立也可在類外建立,使用時區別就是在類中需要用類的物件去呼叫。

12 13 class newmessage;

19 20 void main()

21 32

33 inline message newmessage::deliver(message *stu)

34

補充:函式的執行結果會將結構體的變數值成功修改!
注意:把乙個完整的結構體變數作為引數傳遞,要將全部成員值乙個乙個傳遞,費時間又費空間,開銷大。如果結構體型別中的成員很多,或有一些成員是陣列,則程式執行效率會大大降低。在這種情況下,用指標做函式引數比較好,能提高執行效率。

3.傳遞結構體成員,值傳遞或位址傳遞

這種情況就是結構體內部的成員變數作為引數傳遞,可以使值傳遞,可以是位址傳遞。

1 #include2 #define commandlength 100

3 using std::cout;

4 using std::endl;

5 //注意 c和c++中struct和typedef struct有區別。

6 struct messagemessage;

11 //c++中結構體可在類中建立也可在類外建立,使用時區別就是在類中需要用類的物件去呼叫。

12 13 class newmessage;

19 20 void main()

21 ;

後面的數字用來限定成員變數占用的位數。成員 m 沒有限制,根據資料型別即可推算出它占用 4 個位元組(byte)的記憶體。成員 n、ch 被:後面的數字限制,不能再根據資料型別計算長度,它們分別占用 4、6 位(bit)的記憶體。

要注意的是,c語言標準規定,位域的寬度不能超過它所依附的資料型別的長度。通俗地講,成員變數都是有型別的,這個型別限制了成員變數的最大長度,:後面的數字不能超過這個長度。

位域成員可以沒有名稱,只給出資料型別和位寬,如下所示:

struct bs;
無名位域一般用來作填充或者調整成員位置。因為沒有名稱,無名位域不能使用。

上面的例子中,如果沒有位寬為 20 的無名成員,m、n 將會挨著儲存,sizeof(struct bs) 的結果為 4;有了這 20 位作為填充,m、n 將分開儲存,sizeof(struct bs) 的結果為 8。 

函式存放在記憶體的**區域內,它們同樣有位址.如果我們有乙個 int test(int a) 的函式,那麼,它的位址就是函式的名字,這一點如同陣列一樣,陣列的名字就是陣列的起始位址。

data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);
例如:

int (*fp)(int a); // 這裡就定義了乙個指向函式(這個函式引數僅僅為乙個 int 型別,函式返回值是 int 型別)的指標 fp。
int test(int a)

int main(int argc, const char * ar**)

{

int (*fp)(int a);

fp = test;

cout<注意:函式指標所指向的函式一定要保持函式的返回值型別,函式引數個數,型別一致。

類成員函式指標與普通函式指標不是一碼事。前者要用 .* 與 ->* 運算子來使用,而後者可以用 * 運算子(稱為"解引用"dereference,或稱"間址"indirection)。

普通函式指標實際上儲存的是函式體的開始位址,因此也稱"**指標",以區別於 c/c++ 最常用的資料指標。

而類成員函式指標就不僅僅是類成員函式的記憶體起始位址,還需要能解決因為 c++ 的多重繼承、虛繼承而帶來的類例項位址的調整問題,所以類成員函式指標在呼叫的時候一定要傳入類例項物件。

嵌入式基礎知識

嵌入式處理器的分類包括三種,分別是 嵌入式微控制器 嵌入式微處理器 數字訊號處理器 安裝linux系統對硬碟分割槽時,必須有兩種分割槽型別 檔案系統分割槽 和交換分割槽 在vivi狀態下,顯示系統的分割槽命令是 part show。鏈結分為 符號鏈結 和硬鏈結 當gcc僅對原始檔進行編譯而不鏈結生成...

嵌入式系統基礎知識 了解嵌入式系統

嵌入式系統用於大量電子裝置,它們的設計涉及到硬體和軟體技術。隨著計算機技術的進步,其技術也越來越多地嵌入到越來越多的電子產品中。嵌入式系統提供的功能是使電子裝置具有比僅使用硬體技術時更大的能力。因此,嵌入式系統可用於各種電子裝置和小工具中。從電子計時器等專案中的少量處理,到遊戲控制台甚至主要工廠和其...

嵌入式系統基礎知識 了解嵌入式系統

嵌入式系統用於大量電子裝置,它們的設計涉及到硬體和軟體技術。隨著計算機技術的進步,其技術也越來越多地嵌入到越來越多的電子產品中。嵌入式系統提供的功能是使電子裝置具有比僅使用硬體技術時更大的能力。因此,嵌入式系統可用於各種電子裝置和小工具中。從電子計時器等專案中的少量處理,到遊戲控制台甚至主要工廠和其...