當前位置:首頁 > IT技術 > 編程語言 > 正文

《跟著星仔學C語言》第四章 函數與程序結構
2022-09-06 22:49:24

04_0100 4.1 函數的基本知識

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

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

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

04_0200 4.2 返回非整形值的函數

4.2 返回非整形值的函數

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


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

04_0300 4.3 外部變量

4.3 外部變量

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

函數的本質---堆棧視角
從堆棧的視角來講解函數調用本質
****編譯出來的exe還會有鏈接函數名嗎?

函數的int返回值的本質是什么

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

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


變參函數的秘密
printf是怎么確定變量的個數的

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

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

visual studio的默認堆棧大小是多少?
除了堆棧變量,函數調用等也會使用堆棧.

代碼: 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 作用域規則 4.5 頭文件 4.6 靜態變量 4.7 寄存器變量 4.8 程序塊結構 4.9 初始化


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

所有的函數類型
1.外部函數:函數內不能定義函數,所有函數都是外部函數
2.靜態函數:用static修飾的函數

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

外部變量(全局變量)
外部函數(因為函數不能定義在函數內部,所以函數都是外部的)

靜態變量
外部靜態變量
函數內部靜態變量

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

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

數組的初始化
1.省略長度,編譯器會把花括號中初始化表達式的個數作為數組的長度
2.如果初始化表達式中的個數比數組元素少,沒有初始化的將會被初始化為0,不能跳過前面的數組元素而直接初始化后面的元素
字符數組初始化比較特殊:
char pattern[] = "ould " 與 char pattern[] = { 'o', 'u', 'l', 'd','国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码