• 當前位置:首頁 > 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|中文字幕亚洲无线码