聲明結(jié)構(gòu)體變量;結(jié)構(gòu)體所占內(nèi)存大小是其成員所占內(nèi)存之和。
struct 結(jié)構(gòu)體類型名{//結(jié)構(gòu)體類型名可省略,匿名結(jié)構(gòu)體 成員表;//可以有多個成員函數(shù);//可以有也可以沒有}結(jié)構(gòu)變量量表 [={}];//同時定義多個變量“,”隔開,最后的“;”不能漏??梢栽诼暶鞯耐瑫r初始化。 訪問成員的一般形式是:結(jié)構(gòu)變量名 . 成員名
初始化
對結(jié)構(gòu)體的成員逐個賦值
stu1.num = 18;stu1.score = 90.5;
可以對結(jié)構(gòu)體進(jìn)行整體賦值
stu2 = (struct Student){"Tom", 15, 88.0};
結(jié)構(gòu)體變量的初始化也可以與定義同時:
struct Student{ //聲明結(jié)構(gòu)體 Student char name[20]; int num; float score; }stu = {"Mike", 15, 91}; //注意初始化值的類型和順序要與結(jié)構(gòu)體聲明時成員的類型和順序一致
可以部分初始化:
struct Student stu4 = {.name = "Lisa"};1
也可以按照任意的順序使用指定初始化項(xiàng)目:
struct Student st = { .name = "Smith", .score = 90.5, .num = 18 };
2)、結(jié)構(gòu)體變量的存儲原理
1)結(jié)構(gòu)體數(shù)據(jù)成員對齊的意義
……
2)結(jié)構(gòu)體大小的計算方法和步驟
……
3)#pragma pack宏
……
另行了解
定義
struct Student{ //聲明結(jié)構(gòu)體 Student char name[20]; int num; float score;}stu[5]; //定義一個結(jié)構(gòu)結(jié)構(gòu)數(shù)組stu,共有5個元素
初始化
定義結(jié)構(gòu)數(shù)組的同時進(jìn)行初始化
struct Student stu[2] = {{"Mike", 27, 91},{"Tom", 15, 88.0}};
整體賦值:
stu[2] = (struct Student){"Jack", 12, 85.0};
結(jié)構(gòu)體變量的成員逐個賦值:
strcpy(stu[3].name, "Smith");stu[3].num = 18;stu[3].score = 90.5;
聲明聯(lián)合數(shù)據(jù)類型變量。多個成員共用一塊內(nèi)存。在編譯時會選取成員中長度最長的來聲明。所有的數(shù)據(jù)成員具有相同的起始地址。一個union只配置一個足夠大的空間來容納最大長度的數(shù)據(jù)成員。
union a { //聲明了三個成員,但是長度不一(后面sizeof的結(jié)果不同機(jī)器結(jié)果不同,但double肯定是最長的),于是編譯器會選取double的長的作為union a的長度 int a1; // sizeof(int) = 4 float a2; // sizeof(float) = 8 double a3; // sizeof(double) = 16};
聲明與struct相似,替換一下struct聲明中的關(guān)鍵字就可了
enum變量類型還可以給其中的常量符號賦值,如果不賦值則會從被賦初值的那個常量開始依次加1,如果都沒有賦值,他們的值從0開始依次遞增1.
聲明
enum 枚舉類型{枚舉成員列表}; //其中的枚舉成員列表是以逗號“,”相分隔eg:enum Spectrum{red,balck,yellow,blue,white};
可以用“枚舉類型”聲明符號名稱來表示int型常量。只要是能使用int型的地方就能夠使用枚舉類型。注意:C語言中的枚舉的一些特性不適合C ;比如c中的枚舉變量允許使用 運(yùn)算符,但是c 中則不允許。
enum Spectrum{red,black,yellow,blue,white}; 0 1 2 3 4 可以在枚舉聲明中,可以為枚舉常量指定整數(shù)值:如enum Spectrum{ red=10, black=20, yellow=30,blue=40, white=50 };可在枚舉類型成員列表中,聲明多個成員的數(shù)值(整型常量值)相同, 如:enum Spectrum{ red, black=22, yellow, blue = 22, white };則: red = 0, black = 22, yellow = 23, blue = 22 white = 23.
匿名的
enum
枚舉
enum {FALSE,TRUE};//FALSE 0, TRUE 1
輸出12個月的英文單詞
#include<stdio.h>#include <stdlib.h>enum Months{jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec};int main(void) { enum Months m; //flag用來標(biāo)記輸出的個數(shù),若為4個,則輸出一個換行符 int flag=0; //指針數(shù)組,存放的是個字符串的入口地址 char *months[]={"January","February","March","April","May","June", "July","August","September","October","November","December"}; for (m=jan;m<=dec;m ) { printf ("%-d月份:%-10s ",m,months[m-1]); flag ; if (flag%4==0) { putchar('\n'); } } system ("pause"); return 0; }
用以給數(shù)據(jù)類型取名
1)與#define的區(qū)別
typedef有點(diǎn)像#define宏,其實(shí)際類型替代同義字。不同點(diǎn)是typedef在編譯時被解釋,因此讓編譯器來應(yīng)付超越預(yù)處理器能力的文本替換。
聲明一個指向字符變量的指針和一個字符變量
typedef char* pchar;pchar pa,pb;
簡化結(jié)構(gòu)體
struct tagPOINT1 { int x; int y;};struct tagPOINT1 p1;typedef struct tagPOINT { int x; int y;}POINT;POINT p1;//可以這樣;struct tagPOINT p2;//也可以這樣;
在其中一個c文件中定義一個全局變量key,然后在另一個要使用key這個變量的c文件中使用extern關(guān)鍵字聲明一次,說明這個變量為外部變量,是在其他的c文件中定義的全局變量。
(1)main.c文件
#include "common.h" unsigned char key; int p(void) { printf("%d\n",i); return 0; }
(2)common.c文件
#include "common.h" extern unsigned char key;int main() { p(); system("pause"); return 0; }
來源:https://www.icode9.com/content-4-792151.html
聯(lián)系客服