您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關C語言中基本的數據類型有哪些,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
我們知道C語言中有基本數據類型:
int:基本整型,用于存儲整數,占4個字節,默認值為0
short:短整型,占2個字節
long:長整型,占4個字節
long long:雙長整型,占8個字節,比較少用
float:單精度浮點型,占4個字節
double:雙精度浮點型,占8個字節
char:字符型,用于存儲單字符,占1個字節。
(與Java等語言不同的是,c語言中沒有字符串類型,需要使用字符型數組來存放字符串)
// 定義字符型數組并賦值 char string[3]; string = ”abc”;
除了這些簡單的、不可拆分的原子數據類型,還存在著復合數據類型(也叫構造類型),如枚舉類型、數組類型、結構體類型、共用體類型,這里我們要討論的就是其中的結構體類型。
注:我認為,數據類型其實包含了兩個概念,首先是將具有相同屬性的數據處理成一個集合,使屬性得以被限定、區分(如int a=“A”;是錯誤的);其次是在這個集合上定義了一些操作,如int型的加減乘除運算。
struct 結構名 { 數據類型 變量名; 數據類型 變量名; ... } ;
struct關鍵字用來聲明結構體,花括號內的結構體成員由我們任意發揮(若存在相同的數據類型,也可以簡寫:int a,b,c;)。
這里的結構名叫做結構體的標識符,類似于int a中的int,但僅僅是類似,請看下面:
//定義一個名為student的結構體 struct student{ char name[8]; int age; char sex[2]; };
現在我們只是按照自己的需求,完成了對結構體student的定義,然而這僅僅是個模版,編譯后并沒有為其分配空間,下面讓我們去使用這個新的數據類型:
student stu;//報錯
在上面提到student這個標識符只是類似于基本數據類型的類型名稱,因為要想完全在概念上等價,我們需要在前面加上struct關鍵字,即struct student是一個整體,不可以省去struct:
struct student stu; //成功編譯
現在,我們已經成功定義了一個變量stu,系統為其分配了該數據類型(結構體)所需要的儲存空間。
以上兩部分還可以簡寫在一起:
struct student{ char name[8]; int age; char sex[2]; }stu;//將stu寫在尾綴,構造結構體的同時完成了對結構體變量的定義,如需多個結構體變量,可以使用逗號分隔開
struct student{ char name[8]; int age; char sex[2]; }stu1,stu2,stu3;//同時定義多個結構體變量,如果需要定義多個具有相同模式的結構體變量時用這種方法比較方便
到這里,你有沒有想過能不能省略結構體名稱呢?可以。此時定義的結構體稱為匿名結構體(也叫無名結構體):
struct{ char name[8]; int age; char sex[2]; }stu1,stu2,stu3;//省略掉標識符后,依然能完成變量的定義,但此時要注意,我們已經無法通過在結構體外定義新的該結構體的變量了,所以匿名結構體僅僅在確定不會再定義其他結構體變量的時候使用
typedef關鍵字,作用是給一種數據類型定義一個新名字。這里的數據類型包括內部數據類型(int,char等基本數據類型)和自定義的數據類型(struct等)。使用typedef起別名有兩個好處,一是給變量一個易記、含義明確的新名字,二是簡化一些比較復雜的類型聲明(如struct student中的struct)。
typedef struct student{ char name[8]; int age; char sex[2]; }xuesheng; xuesheng stu;//省略struct,使用別名完成變量stu的創建
現在,仔細閱讀的你不難發現:此時尾綴xuesheng的地位已經不可與同日而語了,時過境遷,它不再是我們偷懶定義出來的變量,而是結構體student的別名了,此時struct student與xuesheng等價。
typedef struct{ char name[8]; int age; char sex[2]; }xuesheng;//這里的student依然可以去掉!即使去掉,我們也可以在以后去使用它的別名xuesheng
一個變量的初始化其實包含兩個內容,一是創建變量,二是為變量賦值以使用。現在讓我們賦值吧。
a.逐個賦值:
stu.name = "Jack";//錯誤,不能直接給數組名賦值,因為數組名是一個常量 strcpy(stu.name, "Chenhao");//不能直接給數組名賦值,因為數組名是一個常量。 stu.num = 21; strcpy(stu.sex, "男");
b.整體賦值:
stu = (struct Student){"Chenhao", 21, "男"};//此時需要強制類型轉換,因為數組賦值也是使用{},不轉換的話系統無法區分! stu = (xuesheng){"Chenhao", 21, "男"};//別忘了也可以用等價的別名喲~
struct student{ char name[8]; int age; char sex[2]; }stu = {"Chenhao", 21, "男"};//此時很直觀是在為結構體變量賦值,因此不需要強制類型轉換
struct student{ char name[8]; int age; char sex[2]; }stu = {"Chenhao", 21, "男"}; struct student stu1 = stu;//不是通過指針指向來賦值,確確實實是復制了一份相同的stu成員變量給放到了新變量stu1的存儲空間里,也就是stu1如實地開辟了自己的空間
以上賦值的方式需要注意初始化值的類型和順序要與結構體聲明時成員對應的類型和順序保持一致!另外,部分初始化的方式請移步自行查閱。
與結構體數組的成員訪問相同,一樣放在結構體數組中講。
結構體類型也與基本數據類型一樣,可以作為數組的元素的類型。
結構數組定義格式:
struct 結構名 { 成員列表 } 數組名[數組長度];
如:
struct student{ char name[8]; int age; char sex[2]; }stu[145];//定義一個結構結構數組stu,共有145個元素,即145個學生的學生信息
結構體數組的賦值
//整體賦值: stu = (struct Student){{"Zhangsan", 18, "男"},{"Lisi", 15, "女"},......}; stu[0] = (struct Student){"Chenhao", 21,"男"}; //結構體變量成員逐個賦值: strcpy(stu[144].name, "Smith"); stu[144].age = 10; stu[144].sex = "女";
//逐個輸出結構數組的元素 int length = sizeof(stu) / sizeof(struct student);//結構體數組的長度,結構體數組變量大小/單個模版大小 for (int i = 0; i<length; i++) { printf("姓名:%s 年齡:%d 性別:%s \n", stu[i].name, stu[i].age, stu[i].sex); }
結構體數組小歸納:
名稱 | 含義 |
---|---|
stu | student結構體數組 |
stu[2] | student結構的一個變量,為第三個同學 |
stu[2].name | char型數組,第三個同學的名字數組 |
stu[2].name[0] | 第三個同學的名字的首字母 |
//直接 struct student{ char name[8]; int age; char sex[2]; }*pstu;
//后續間接 typedef struct student{ char name[8]; int age; char sex[2]; }stu; stu *pstu;//定義了一個指針變量,它只能指向Student結構體類型的結構體變量
如果想把已經定義的結構體變量交給一個指針,則必須用取址符&:
struct student{ char name[8]; int age; char sex[2]; }stu; pstu =stu//錯誤 pstu =&stu//正確
(這里要說明的是,結構體變量名稱單獨拿出來代表變量全體成員值的集合,這與數組不同,數組名稱在使用時直接轉化為該數組的起始地址)
(*結構指針變量). 成員名
或
結構指針變量 -> 成員名(我們管“->”叫做“箭頭”)
(*pstu).name; //或 pstu->name;
注意(* pstu).name的小括號不能省略,成員符“.”優先級最大,取值符“ *”優先級在其次,去掉括號就相當于 *(pstu.name)了。
格式千千萬,只有全掌握才能閱讀別人的代碼,但在實際開發中最推薦的格式依然是:
typedef struct student{ char name[8]; int age; char sex[2]; }xuesheng;
也不要忘了在整體賦值且在結構體外賦值時的強制轉換。
如果有所收獲,點個贊唄~
最后:
#include<stdio.h> int main(){ printf("aiweiye forever."); }
以上就是C語言中基本的數據類型有哪些,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。