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

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

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

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

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

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

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

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

如果先前沒(méi)有聲明過(guò)的一個(gè)名字出現(xiàn)在某個(gè)表達(dá)式中,并且其后緊跟一個(gè)左圓括號(hào),那么上下文就會(huì)認(rèn)為這是一個(gè)函數(shù)名字,并假定返回int
但上下文并不對(duì)其參數(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ì)---堆棧視角
從堆棧的視角來(lái)講解函數(shù)調(diào)用本質(zhì)
****編譯出來(lái)的exe還會(huì)有鏈接函數(shù)名嗎?

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

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

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


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

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

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

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

代碼: 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.自動(dòng)變量:也就是堆棧變量
4.寄存器變量(只適用于自動(dòng)變量及函數(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ù)組長(zhǎng)度
2.輔助編譯器編譯的叫聲明
? ? ? ? 聲明不可以對(duì)變量進(jìn)行初始化
? ? ? ? 如果是數(shù)組, 聲明不一定要指定數(shù)組長(zhǎng)度,也可以亂指定數(shù)組長(zhǎng)度

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

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

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

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

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