#include <stdio.h>
int main(int argc, const char * argv[]) {
//第1種,匿名結(jié)構(gòu)體,不需要結(jié)構(gòu)體名,只需要結(jié)構(gòu)體變量,只使用一次。
struct {
char *title;
} someStruct;
someStruct.title = "我是匿名結(jié)構(gòu)體";
printf("%s\n",someStruct.title);
//標準的結(jié)構(gòu)體定義方式(確定結(jié)構(gòu)體的類型)
//第2種 相當于聲明了一個 數(shù)據(jù)類型,類型名稱是 Book
struct Book
{
char *title;
float price;
};
//使用的時候比較怪異,必須在類型名前面還要加上一個 struct 關(guān)鍵字。
//需要加上聲明關(guān)鍵字 和 類型名稱
//就有點類似 java 里 我聲明了一個類,class Person 在使用的使用不能 person 而需要 class Person.. (這有一點反直覺)
struct Book book1;
book1.title = "C Primer Plus";
book1.price = 75.50f;
printf("title = %s price = %.2f\n",book1.title,book1.price);
//第3種 ,聲明結(jié)構(gòu)體的同時聲明結(jié)構(gòu)體變量。
struct Student {
char *name;
float weight;
float height;
} stu1;
stu1.name = "張三";
stu1.weight = 75.5;
stu1.height = 175.50;
printf("姓名 = %s 身高 = %.2f 體重 = %.2f\n",stu1.name,stu1.weight,stu1.height);
//第4種,使用typedef 對已有的結(jié)構(gòu)體類型取別名。
//我們給Student 結(jié)構(gòu)體去別名叫 GoodBoy (這里仍然要加上一個 struct)
typedef struct Student GoodBoy;
GoodBoy boy1 = { .name = "jack",.weight = 88.0,.height = 182.2};
printf("boy1 %s %.2f %.2f\n",boy1.name,boy1.weight,boy1.height);
//第5種,使用typedef 在定義 結(jié)構(gòu)體的時候,不省略結(jié)構(gòu)體原來的名字,取別名
typedef struct Dog {
char *name ;
float weight;
int age;
} Samoyed;
//我們可以使用原來的名字 Dog
struct Dog d1 = {.name = "薩摩耶",.weight = 22.22f,.age = 1};
printf("d1.name = %s d1.weight = %.2f d1.age = %d\n",d1.name,d1.weight,d1.age);
//也可以使用下面定義的別名(使用別名的時候,就可以省略一個struct關(guān)鍵字了)..這也是我個人最常用的方法,好處是可以節(jié)省一個 struct 關(guān)鍵字的輸入
Samoyed d2 = {.name = "哈士奇",.weight = 22.22f,.age = 1};
printf("d2.name = %s d2.weight = %.2f d2.age = %d\n",d2.name,d2.weight,d2.age);
//第6種,省略結(jié)構(gòu)體的原名,直接使用typedef定義一個新名字
typedef struct {
float price;
char *brand;
} Computer;
Computer c = {.price = 12888.00f,.brand = "MacBookPro"};
printf("price = %.2f brand = %s\n",c.price,c.brand);
//最后總結(jié):
//1.匿名結(jié)構(gòu)體,值需要用一次,可以使用 struct {} 變量名
//2.標準的結(jié)構(gòu)體, struct 結(jié)構(gòu)體名 {}
//3.聲明結(jié)構(gòu)體的同時,接著聲明一個結(jié)構(gòu)體變量 struct 結(jié)構(gòu)體名 {} 結(jié)構(gòu)體變量名
// --------- 特別注意,使用typedef 定義結(jié)構(gòu)體的時候,原來的結(jié)構(gòu)體變量名此時就變成了結(jié)構(gòu)體本身替換的名字,且在使用的使用可以省略一個struct關(guān)鍵字。
//4.使用typedef 給已經(jīng)存在的結(jié)構(gòu)體取別名 typedef existsStruct newStructName
//5.使用typedef 定義標準結(jié)構(gòu)體 typedef struct 結(jié)構(gòu)體名 {} 結(jié)構(gòu)體別名
//6.使用typedef 定義省略結(jié)構(gòu)體名只有別名的結(jié)構(gòu)體 typedef struct {} 結(jié)構(gòu)體別名
return 0;
}
iOS 學習心得記錄之:C語言結(jié)構(gòu)體定義的六中模式
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 在面向接口、面向?qū)ο缶幊痰倪^程中,會遇到實際物體類別與定義類別相分離的情況。 例如,我們有三種物體,他們的固有類別...
- 結(jié)構(gòu)體,通俗講就像是打包封裝,把一些有共同特征(比如同屬于某一類事物的屬性,往往是某種業(yè)務(wù)相關(guān)屬性的聚合)的變量封...
- pragma mark 結(jié)構(gòu)體-類型定義方式 pragma mark 概念 pragma mark 代碼
- Js編程過程中,或多或少會出現(xiàn)需要動態(tài)生成一系列變量名,數(shù)量比較大時也不方便提前聲明,這時候可能就需要先進行字符串...