語言------結(jié)構(gòu)體 ? ?枚舉學(xué)習(xí),有需要的朋友可以參考下。
結(jié)構(gòu)體 ?枚舉
1.局部變量:
>定義.在代碼塊內(nèi)部定義的變量都是局部變量,包括形參
>作用域.從定義變量的那一行開始,一直到代碼塊結(jié)束
>存放位置.存放在棧中
>生命周期.執(zhí)行到定義變量的那一行開始分配存儲空間,代碼塊結(jié)束后就釋放
>特點:沒有固定的初始化值
2.全局變量:
>定義.在函數(shù)外定義的變量
>.作用域.從定義變量的那一行開始,一直到文件末尾
>存放位置.靜態(tài)區(qū)
>生命周期.程序一啟動就會分配存儲空間,知道程序結(jié)束才會釋放
特點:默認(rèn)初始化值是0
結(jié)構(gòu)體基本概念
變量類型變量名;
結(jié)構(gòu)體變量類型變量名;
想定義結(jié)構(gòu)體變量分為兩部:
1.定義結(jié)構(gòu)體類型
2.通過結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量
struct結(jié)構(gòu)體類型名稱
{
成員(屬性)
}
給結(jié)構(gòu)體賦值要通過.的方式賦值
注意點
,只能在定義結(jié)構(gòu)體變量的同時進(jìn)行初始化,不能先定義結(jié)構(gòu)體變量再初始化
結(jié)構(gòu)體內(nèi)存分析
1.定義結(jié)構(gòu)體類型,
定義結(jié)構(gòu)體類型的時候不會為結(jié)構(gòu)體類型分配存儲空間
struct Date
{
int year; //年
int month; //月
int day; //日
};
2.定義結(jié)構(gòu)體變量
只有在定義結(jié)構(gòu)體變量的時候才會真正的分配存儲空間
結(jié)構(gòu)變量存儲值也數(shù)組也一樣,也是從小到大的存,
也就是說從第一個成員開始存放
結(jié)構(gòu)體變量的地址就是它第一個成員的地址
注意:結(jié)構(gòu)體在分配存儲空間的時候有一個補(bǔ)齊算法
結(jié)構(gòu)體所占存儲空間的大小,必須是占用內(nèi)存最大成員的字節(jié)數(shù)的倍數(shù)
結(jié)構(gòu)體變量的定義方式:
1.第一種方式:先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量
1.定義結(jié)構(gòu)體類型
struct Student
{
int age;
char *name;
};
2.通過結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量
struct Student stu;
2.第二種定義方式:定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量
struct Student
{
int age;
char *name;
} stu;
struct Student stu2;
3.第三種方式:定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量,并且這個結(jié)構(gòu)體類型沒有名稱
struct
{
intage;
char*name;
} stu;
缺點:不能復(fù)用
結(jié)構(gòu)體類型的作用域:
在函數(shù)外定義的結(jié)構(gòu)體類型的作用域是從定義的那一行開始一直到文件末尾
在代碼塊中定義的結(jié)構(gòu)體類型的作用域和局部變量的作用域相同
結(jié)構(gòu)體類型的作用域:
> 1.定義在函數(shù)外面:全局有效(從定義的那一行開始一直到文件末尾)
> 2.定義在函數(shù)里面:局部有效(從定義的那一行開始一直到函數(shù)結(jié)束)
結(jié)構(gòu)體指針
變量類型*變量名;
struct Student *sp;
sp = &stu;
*sp == stu
stu.age
注意點:.的優(yōu)先級要比*的優(yōu)先級高,所以要先用()提高*的優(yōu)先級
(*sp).age = 66;
當(dāng)利用指針指向結(jié)構(gòu)體變量后的幾種訪問方式
1.變量名.成員 stu.age;
2.(*指針變量名).成員; ?(*sp).age;
3.指針變量名->成員; ? sp->age;
結(jié)構(gòu)體嵌套定義:
定義結(jié)構(gòu)體類型的時候,類型當(dāng)中的成員還是一個結(jié)構(gòu)體
如果結(jié)構(gòu)體中的成員還是結(jié)構(gòu)體的時候可以通過.逐層訪問
枚舉
枚舉是一種基本數(shù)據(jù)類型
當(dāng)某一個變量只有固定的幾個取值的時候可以定義枚舉變量
想定義枚舉變量必須先定義枚舉類型,定義枚舉類型的作用是告訴系統(tǒng)枚舉有哪些取值
1.先定義枚舉類型
enum枚舉名稱
{
取值
}
枚舉的本質(zhì)就是整型
枚舉的取值默認(rèn)情況是從0開始依次遞增
2.通過枚舉類型定義枚舉變量
雖然表面上看上去只能給枚舉變量賦值我們定義的幾個固定的值,
但是枚舉變量的本質(zhì)就是一個整型變量所以也可以賦值其它整型常量
數(shù)據(jù)類型總結(jié)
1.基本數(shù)據(jù)類型
整型:
int 4個字節(jié)%d
short 2個字節(jié)%hd
long 8個字節(jié)%ld
long long 8個字節(jié)%lld
unsigned 4個字節(jié)0和正數(shù)0~2(32)-1; %u
signed 4個字節(jié)正數(shù)負(fù)數(shù)和0 -2(31)~2(31)-1
字符型:
char 1個字節(jié)%c
存儲細(xì)節(jié): ASCII值0~127
浮點型:
float 4個字節(jié)%f
double 8個字節(jié)%lf
枚舉類型:
> 1.先定義枚舉類型,再通過枚舉類型定義枚舉變量
> 2.定義格式: enum枚舉類型名稱{取值}; ?enum枚舉類型名稱變量名稱;
> 3.枚舉的本質(zhì)就是整型
2.構(gòu)造類型
數(shù)組:
只能存放同一種類型的數(shù)據(jù)
元素類型變量名[元素個數(shù)];
結(jié)構(gòu)體:
可以存放不同類型的數(shù)據(jù)
*定義結(jié)構(gòu)體類型 struct結(jié)構(gòu)體類型名稱{成員;};
*通過結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量 struct結(jié)構(gòu)體類型名稱變量名稱;
3.指針類型
變量類型*變量名稱;
指針類型的作用:
1.定義的時候是什么類型將來就只能指向什么類型的數(shù)據(jù)(保存什么類型的變量地址)
2.指針取值的時候會根據(jù)TA的類型取值(是什么類型就取多少個字節(jié))
4.空類型
void