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