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