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|中文字幕亚洲无线码