1 結構聲明結構聲明描述了一個結構的組織布局。舉例如下:
struct tempA
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數組 carrayA
};
下邊依次對此結構進行解析:
1、struct
struct 是一個關鍵字,表明跟在其后的是一個結構;
2、tempA
tempA 是一個 可選的標記 ,但是在上述例子中,不能去掉,否則該結構沒有作用的 “對象” ,不過可寫成如下樣式:
struct
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數組 carrayA
}tempB;
tempA 這個標記,寫與不寫,主要有以下區別:
1、寫了此標記,則可以在后續程序中使用此標記來引用該結構;
struct tempA book; // C 寫法// C++允許在聲明結構變量時,省略關鍵字struct
tempA book; // C++ 寫法
2、如果不寫此標記,則只引用該結構定義了一個變量,也就是一次性的,如果需要定義另外一個擁有相同元素的結構體變量,必須要全部重新再寫一遍,不能直接引用 tempB 。
2 定義結構變量結構有兩層含義,一層是 “結構布局” ,就是上邊的結構聲明。結構布局告訴編譯器如何表示數據,但是它并未讓編譯器為數據分配空間(待確認,看參考的經驗,利用 sizeof 還是有空間的)。
下一步是創建一個結構變量, 即是結構的另外一層含義,前邊也有提到過,程序中實現如下:
struct tempA book; // C 寫法
tempA book; // C++ 寫法
但是如果打算多次使用此結構,就要使用帶標記的形式,也就是必須要寫 tempA ;或使用 typedef ,下邊將講一下 typedef 的用法。
3 typedef個人建議使用 typedef 時,把標記也寫上,這樣在 C 中,可以使用 typedef 定義的類型(tempB),在 C++ 中可以直接使用標記(tempA)。兩個名字應該是不能一樣的。
typedef struct tempA
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數組 carrayA
}tempB;
使用 typedef 的好處有如下兩點:
1、為經常出現的類型創建一個方便,易識別的類型名。
2、typedef 常用于給復雜的類型命名。
4 常見方法舉例4.1 未用typedef先聲明結構體類型,再定義結構變量
struct tempA
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數組 carrayA
};
struct tempA book; // C 寫法
tempA book; // C++ 寫法
在聲明類型的同時,定義結構變量
struct tempA
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數組 carrayA
}book;
直接定義結構體類型變量(沒有標記)
struct
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數組 carrayA
}book;
4.2 使用typedef直接定義結構體變量,沒有標記,但是可以使用此變量引用該結構體
typedef struct
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數組 carrayA
}tempB;
tempB book; // C C++ 均可
推薦此方法,即定義標記,又定義結構體變量
typedef struct tempA
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數組 carrayA
}tempB;
此時如果使用 C ,則可以使用 tempB ;如果使用 C++ ,則可以使用 tempA 或 tempB 。
5 總結除了上邊講的,還有一些其他的結構體初始化,結構體里邊定義結構體等內容。但萬變不離其宗,都可以參考文章開頭的網址,里邊講的比較詳細。這里只是簡單做個總結。
后續我也會按文中推薦的標準來使用(用 typedef ,標記和結構變量都要),這樣兼容性比較好,也使自己的代碼有比較統一的風格。
編輯:jq
-
程序
+關注
關注
117文章
3826瀏覽量
83007 -
C++
+關注
關注
22文章
2119瀏覽量
75336
原文標題:C/C++ 結構體定義及使用
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
定義IO初始化結構體
《ESP32S3 Arduino開發指南》第三章 C/C++語言基礎
VirtualLab應用:亞波長結構偏振光柵的深入分析
主流的 MCU 開發語言為什么是 C 而不是 C++?

創建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結果與Python代碼不同是為什么?
Spire.XLS for C++組件說明

同樣是函數,在C和C++中有什么區別
TMS320C28x優化C/C++編譯器v22.6.0.LTS

ostream在c++中的用法
技術干貨驛站 ▏深入理解C語言:編程高手必備,全方位解析運算符的核心技能!

評論