函數和變量都需要滿足:先聲明后使用(重要)
在 函數的聲明中,形參的名字可以省略
函數的定義是一種特殊的是聲明,比聲明更加強大;函數使用前必須進行聲明,但不必要聲明具體定義
.h——函數的聲明
.c——函數的定義,說明使用
自己創建的頭文件用“”
標準庫里面的頭文件使用<>
隱藏關鍵代碼——靜態庫
extern用來聲明來自外部的符號
全局變量的作用域是整個工程
變量創建到銷毀是他的一個生命周期
static只改變變量的生命周期(存儲方式),不改變作用域
static修飾全局變量時,改變了全局變量的鏈接屬性,使得外部鏈接屬性變成了內部鏈接屬性,這種變量只能在自己存在的.c文件中使用,其他文件不能使用
函數也具有外部鏈接屬性,只要在其他文件中有正確聲明,就可以直接使用
包含自己的頭文件應該使用雙引號
F5是讓程序執行到(運行邏輯上的如循環)下一個斷點處
調試就是指對單個語句進行研究和分析,開始執行不調試就是最好的例子Ctrl +F5
調試時候,箭頭指向的是下一步即將執行的語句(按F10或者F11)
開始調試后才能看到監視窗口
四個二進制位可以表示一個16進制位
三個二進制位代表一個八進制位
每一個字節都有一個地址
棧區中內存的使用習慣:(不同的實現環境里存在區別,以下為X86環境)
優先使用高地址的空間再使用低地址的空間,數組隨著下標的增長,使用的內存空間地址由低到高變化
不同的環境,bug或者release不同版本使用,都會影響最后程序執行的結果
release版本是存在優化的
數組在函數傳參時不需要再繼續定義類型
每次函數調用的時候在棧區里都會有屬于他們的一個專屬空間(運行式堆棧),使用結束后會銷毀
循環是一種迭代,迭代不僅僅是一種循環
斐波那契數列——指數爆炸增長
青蛙跳臺階問題
反碼,除符號位外其他位都取反,
補嗎,反碼+1
非負整數原碼、反碼、補碼相同
char 是否為signed char取決于編譯器,在VS上是signed
char類型的取值范圍:-128~127
x86_------32位環境
x64 ------64位環境
數組的元素是連續存放的
指針變量的訪問和加減的空間都取決于 他的類型
指針-指針必須類型一致,連續同一的空間內
數組名其實是數組首元素的地址
有兩個例外:
1.sizeof(數組名)
這里的數組名表示的是整個數組,計算的是整個數組
2.&數組名
這里的數組名也表示整個數組,取出的是整個數組的地址
除此之外,所有的數組名都是數組首元素的地址
arr[i]也可以寫成i[arr],但是可讀性不高
數組傳參,形參部分寫成數組
數組傳參的本質,是傳遞數組首元素的地址,所以形參即使寫成數組的形式,本質上也是一個指針變量
數組傳參部分可以寫成數組也可以寫成指針
指針類型決定了指針的差異
size_t是一種無符號整型
在 C 語言里,'\0' 代表的是 ASCII 碼值為 0 的空字符(Null Character)。它的數值等同于整數 0。在字符串里,'\0' 一般被用作字符串的結束符,以此表明字符串到此結束。
一個局部變量未初始化的話,他的值是隨機的
空指針不能直接訪問
使用指針前檢查是否為空指針,保證程序沒有問題if(p !=NULL)
避免返回局部變量的地址
使用%s打印字符串的時候 ,只需要提供首字符地址就行
常量字符串不能被修改,數組能被修改
內容相同的常量字符串只需要保存一份
排序算法:
冒泡排序
插入排序
選擇排序
快速排序
qsort底層使用的快速排序的思想
兩個字符串比較大小不能使用><>=<=
應該使用strcmp,比較的是對應位置上字符的ASCII值大小,不是字符串的長度
比較兩個結構體
聲明函數時,可以省略參數變量名字
void* 泛型編程
sizeof是操作符不是函數
strlen是庫函數,求字符串的長度,只能針對字符串(字符數組),遇到\0停
strlen的參數需要是地址 ?size_t strlen(const char* str)