當(dāng)前位置:首頁 > IT技術(shù) > 編程語言 > 正文

《跟著星仔學(xué)C語言》第四章 函數(shù)與程序結(jié)構(gòu)
2022-09-06 22:49:24

04_0100 4.1 函數(shù)的基本知識

4.1 函數(shù)的基本知識
返回值類型 函數(shù)名(參數(shù)聲明表)
{
? ? 聲明和語句
}

如果有返回值,那么一個函數(shù)的所有路徑都需要有返回值

Linux下多個文件的編譯
代碼:http://q1024.com/p/item.php?u=krc
視頻:https://www.bilibili.com/video/BV12L4y1Y76R?p=28

04_0200 4.2 返回非整形值的函數(shù)

4.2 返回非整形值的函數(shù)

如果先前沒有聲明過的一個名字出現(xiàn)在某個表達(dá)式中,并且其后緊跟一個左圓括號,那么上下文就會認(rèn)為這是一個函數(shù)名字,并假定返回int
但上下文并不對其參數(shù)作任何假設(shè).


代碼:http://q1024.com/p/item.php?u=krc
視頻:https://www.bilibili.com/video/BV12L4y1Y76R?p=29

04_0300 4.3 外部變量

4.3 外部變量

如果變量定義在任何函數(shù)的外部,則是外部變量

函數(shù)的本質(zhì)---堆棧視角
從堆棧的視角來講解函數(shù)調(diào)用本質(zhì)
****編譯出來的exe還會有鏈接函數(shù)名嗎?

函數(shù)的int返回值的本質(zhì)是什么

什么是堆棧變量
----根據(jù)esp,ebp和變量的位置, 來說明變量就是放在堆棧里面的

為什么會堆棧溢出
----遞歸讓堆棧溢出
----定義變量讓堆棧溢出


變參函數(shù)的秘密
printf是怎么確定變量的個數(shù)的

printf("%d")會發(fā)生什么?

事實(shí)上,沒有真正的變參,所謂變參實(shí)際上是某一個參數(shù)指明了參數(shù)的個數(shù)

visual studio的默認(rèn)堆棧大小是多少?
除了堆棧變量,函數(shù)調(diào)用等也會使用堆棧.

代碼: http://q1024.com/p/item.php?u=krc
視頻:
https://www.bilibili.com/video/BV12L4y1Y76R?p=30
https://www.bilibili.com/video/BV12L4y1Y76R?p=31
https://www.bilibili.com/video/BV12L4y1Y76R?p=32
https://www.bilibili.com/video/BV12L4y1Y76R?p=33

?04_0400 4.4 作用域規(guī)則 4.5 頭文件 4.6 靜態(tài)變量 4.7 寄存器變量 4.8 程序塊結(jié)構(gòu) 4.9 初始化


所有的變量類型
1.外部變量: 也就是全局變量
2.靜態(tài)變量: 用static修飾的變量
3.自動變量:也就是堆棧變量
4.寄存器變量(只適用于自動變量及函數(shù)的形式參數(shù))
5.函數(shù)形式參數(shù)

所有的函數(shù)類型
1.外部函數(shù):函數(shù)內(nèi)不能定義函數(shù),所有函數(shù)都是外部函數(shù)
2.靜態(tài)函數(shù):用static修飾的函數(shù)

變量/函數(shù)的定義與聲明
1.真正干活的叫定義(分配內(nèi)存空間)
? ? ? ?如果是數(shù)組,定義一定要確定數(shù)組長度
2.輔助編譯器編譯的叫聲明
? ? ? ? 聲明不可以對變量進(jìn)行初始化
? ? ? ? 如果是數(shù)組, 聲明不一定要指定數(shù)組長度,也可以亂指定數(shù)組長度

外部變量(全局變量)
外部函數(shù)(因?yàn)楹瘮?shù)不能定義在函數(shù)內(nèi)部,所以函數(shù)都是外部的)

靜態(tài)變量
外部靜態(tài)變量
函數(shù)內(nèi)部靜態(tài)變量

作用域
作用域: ? ? ? ?所有文件 ? ? ? ?單個文件 ? ? ? ?大括號內(nèi)
? ? ? ? ?1.外部變量(全局變量) ? ? ? ?文件內(nèi)的靜態(tài)變量 ? ? ? ?大括號內(nèi)的靜態(tài)變量
函數(shù)參數(shù)
堆棧變量
? ? ? ? ?外部函數(shù) ? ? ? ?聲明用static修飾的函數(shù) ? ? ? ??

初始化時機(jī)
初始化: ? ? ? ?程序開始執(zhí)行前初始化 ? ? ? ?看見時初始化
? ? ? ? ?1.外部變量(全局變量)
2.靜態(tài)變量 ? ? ? ?自動變量
寄存器變量

數(shù)組的初始化
1.省略長度,編譯器會把花括號中初始化表達(dá)式的個數(shù)作為數(shù)組的長度
2.如果初始化表達(dá)式中的個數(shù)比數(shù)組元素少,沒有初始化的將會被初始化為0,不能跳過前面的數(shù)組元素而直接初始化后面的元素
字符數(shù)組初始化比較特殊:
char pattern[] = "ould " 與 char pattern[] = { 'o', 'u', 'l', 'd','