1 結構聲明結構聲明描述了一個結構的組織布局。舉例如下:
struct tempA
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數(shù)組 carrayA
};
下邊依次對此結構進行解析:
1、struct
struct 是一個關鍵字,表明跟在其后的是一個結構;
2、tempA
tempA 是一個 可選的標記 ,但是在上述例子中,不能去掉,否則該結構沒有作用的 “對象” ,不過可寫成如下樣式:
struct
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數(shù)組 carrayA
}tempB;
tempA 這個標記,寫與不寫,主要有以下區(qū)別:
1、寫了此標記,則可以在后續(xù)程序中使用此標記來引用該結構;
struct tempA book; // C 寫法// C++允許在聲明結構變量時,省略關鍵字struct
tempA book; // C++ 寫法
2、如果不寫此標記,則只引用該結構定義了一個變量,也就是一次性的,如果需要定義另外一個擁有相同元素的結構體變量,必須要全部重新再寫一遍,不能直接引用 tempB 。
2 定義結構變量結構有兩層含義,一層是 “結構布局” ,就是上邊的結構聲明。結構布局告訴編譯器如何表示數(shù)據(jù),但是它并未讓編譯器為數(shù)據(jù)分配空間(待確認,看參考的經(jīng)驗,利用 sizeof 還是有空間的)。
下一步是創(chuàng)建一個結構變量, 即是結構的另外一層含義,前邊也有提到過,程序中實現(xiàn)如下:
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 類型的數(shù)組 carrayA
}tempB;
使用 typedef 的好處有如下兩點:
1、為經(jīng)常出現(xiàn)的類型創(chuàng)建一個方便,易識別的類型名。
2、typedef 常用于給復雜的類型命名。
4 常見方法舉例4.1 未用typedef先聲明結構體類型,再定義結構變量
struct tempA
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數(shù)組 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 類型的數(shù)組 carrayA
}book;
直接定義結構體類型變量(沒有標記)
struct
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數(shù)組 carrayA
}book;
4.2 使用typedef直接定義結構體變量,沒有標記,但是可以使用此變量引用該結構體
typedef struct
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數(shù)組 carrayA
}tempB;
tempB book; // C C++ 均可
推薦此方法,即定義標記,又定義結構體變量
typedef struct tempA
{
char cvariableA; // char 類型的變量 cvariableA
int ivariableB; // int 類型的變量 ivariableB
float fvariableC; // float 類型的變量 fvariableC
char carrayA; // char 類型的數(shù)組 carrayA
}tempB;
此時如果使用 C ,則可以使用 tempB ;如果使用 C++ ,則可以使用 tempA 或 tempB 。
5 總結除了上邊講的,還有一些其他的結構體初始化,結構體里邊定義結構體等內(nèi)容。但萬變不離其宗,都可以參考文章開頭的網(wǎng)址,里邊講的比較詳細。這里只是簡單做個總結。
后續(xù)我也會按文中推薦的標準來使用(用 typedef ,標記和結構變量都要),這樣兼容性比較好,也使自己的代碼有比較統(tǒng)一的風格。
編輯:jq
-
程序
+關注
關注
117文章
3793瀏覽量
81219 -
C++
+關注
關注
22文章
2113瀏覽量
73742
原文標題:C/C++ 結構體定義及使用
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論