1. 程式人生 > >初級C語言(2)

初級C語言(2)

1.變數——在執行過程中可以改變的 一般在棧stack 中存放
左值=右值
作用域:花括號內 ——————區域性變數
生命週期:當前函式結束後 變數的記憶體 會自動回收
定義變數不能數字開頭
不能使用未初始化的變數
1.1棧(stack)又名堆疊, 大小:1m-2m 通常由計算機自動分配,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

1.進棧(PUSH)演算法
①若TOP≥n時,則給出溢位資訊,作出錯處理(進棧前首先檢查棧是否已滿,滿則溢位;不滿則作②);
②置TOP=TOP+1(棧指標加1,指向進棧地址);
③S(TOP)=X,結束(X為新進棧的元素);
2.退棧(POP)演算法
①若TOP≤0,則給出下溢資訊,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②);
②X=S(TOP),(退棧後的元素賦給X):
③TOP=TOP-1,結束(棧指標減1,指向棧頂)。

1.2 堆(英語:heap)是電腦科學中一類特殊的資料結構的統稱。堆通常是一個可以被看做一棵樹的陣列物件。堆是由程式設計師自己申請建立的。
堆支援以下的基本:

build:建立一個空堆;
insert:向堆中插入一個新元素;
update:將新元素提升使其符合堆的性質;
get:獲取當前堆頂元素的值;
delete:刪除堆頂元素;
heapify:使刪除堆頂元素的堆再次成為堆。

2.常量——在執行過程中不可以改變 用 const 來定義常變數
在定義常變數的同時必須要進行初始化,具有以下性質:

(1)可以定義const常量,具有不可變性。
  例如:const int Max=100; Max++會產生錯誤;
  (2)便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。
  例如: void f(const int i) { …} 編譯器就會知道i是一個常量,不允許修改;
  (3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。 同巨集定義一樣,可以做到不變則已,一變都變!
  如(1)中,如果想修改Max的內容,只需要:const int Max=you want;即可!
  (4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯;
  例如: void f(const int i) { i=10;//error! }

巨集定義 :#define a 10 定義了一個全域性變數a 值為10
在預編譯時候進行 進行巨集替換 ,註釋的替換,標頭檔案的引入,巨集展開不佔執行時間,只佔編譯時間
**3.運算子
3.1 ():函式 強制型別轉換 提升優先順序
3.2 ~:按位取反
3.3 ^異或 :相同為0 不同為1
3. 4 |或 有1 為1
3.5 &與 同1為1
3.6 << 整體按位左移 相當於乘法 >>整體按位右移 相當於除法
3.7 B=a++ 先 b=a 執行語句後 a++ 為後置++
B=++a 先 a++ 後執行語句 b=a 為前置++
3.8 || 邏輯或 a||b||c 前面為真 後面 就不在計算了
3.9 指標 int
p 定義了一個型別為 int
的 p 指標變數 裡邊放的是 變數的地址 *p裡面放的是變數的值
*p=100 * 間接訪問符
例子:

int k;
初始化的 int * p=&k; //這裡是初始化,int 是一個型別,而不是解析p。
若有: int p=&k; //定義了int 的 p 指標變數 裡邊放的是 K的地址
p=5; //這裡的不是表示初始化,是表示解析指標,即給k賦值。*p訪問了K的值

3.10 Sizeof 是個運算子 求 當前變數 位元組大小 在編譯期間 進行判斷變數型別
所有的指標 都為四個位元組
Int a;
Char * p=(char *)&a ; a為Int 類 必須進行強制型別轉換