c語言
一、概述
1.嵌入式開發為什麼選擇c語言?
作業系統核心開發用的是c
語言實現
2.為什麼作業系統選擇用c語言進行開發?(即c語言的特點)
1) c語言具有出色的移植性,能夠在多種不同體系結構的軟體平台中實現
2) c語言簡潔緊湊,使用靈活的語法機制,並且能夠直接訪問硬體
3) c語言有很高的執行效率
3.嵌入式開發中的地位——開發工具
1) 面向過程(結構)處理機制:操作具體事務(追究實現原理)
2) 物件導向處理機制:解決巨集觀事物(追究實現物件)**的
復用性,維護性,擴充套件性
復用性:功能**不做修改,直接呼叫
維護性:**出錯可直接修改
擴充套件性:加入新功能時,可直接修改
c語言之父:丹尼斯·里奇
c語言標準:
k&rc
,ansic/c89 c99
標準
c11標準 【
gcc支援
c89,部分支援
c99】
二、資料結構(基本型別,復合型別)
1.資料結構:資料集合的劃分,不同資料型別對
cpu的意義是不一樣的
① 整型變數 int a;
② 整型指標變數
int *a;
③ 整型指標的指標變數
int **a;
④ 整型陣列
int a[10];
⑤ 整型指標陣列
int *a[10];
⑥ 整型陣列指標變數
int (*a)[10];
⑦ 整型函式指標變數
int (*a)(int);
⑧ 整型函式指標陣列
int (*a[10])(int);
⑨ int *(*(*fp1)(int))[10];
fp1:函式指標變數,該函式指標指向乙個形參為
int,返回值為陣列指標,該陣列指向乙個整型指標陣列。
⑩ int *(*(*arr[5])())();
arr:函式指標陣列,該函式指標指向乙個形參為
int,返回值為函式指標的函式,該函式指標指向乙個形參為空,返回值為整型指標
11 float (*(*b()))();
b:指標函式,函式形參為空,返回陣列指標,該指標指向乙個函式指標陣列,該陣列元素指向形參為空,返回值為
float
的函式12
void *(*c)(char ,int(*)());
c:函式指標變數,指向函式形參為
char
,函式指標,返回值為
void *
13 void **(*d)(int*,char**(*)(char*,char **));
d:函式指標變數,該函式形參為
int*
,另一形參為函式指標變數,該函式形參為
char*
和char**
,返回值為指向指標的指標變數,原函式返回值為指向指標的指標變數
14 float (*(*e[10])(int *))[5];
e:函式指標陣列,該函式指標指向形參為
int*
,返回值為陣列指標,該陣列指標指向5個
float型
2.強制轉化
char
順序是進行隱式型別轉化
3.位元組長度
位元組:8
位 半字:
2位元組, 字:4位元組
資料型別 char
short
intlong
float
double
long long
位元組長度 124
4488
sizeof作為乙個運算子有兩種表示方式:
sizeof a :a
為變數名
sizeof (int):int為資料型別
sizeof與
strlen
的區別1 #include
2 #include 3
4 int main()
5 執行結果
sizeof(a)=6
//加上『\0』
strlen(a)=5
sizeof(b)=100
//陣列分配
100strlen(b)=5
sizeof(c)=4
//指標固定4位元組
strlen(c)=5
指標儲存位址,位址在32
位電腦中為固定長度
4位元組,所以不管什麼型別,所有指標的
sizeof都是4
。 4.對於char
型而言:無符號的取值範圍:
0~255
,有符號的取值範圍:
-128~127
正數:原碼=
補碼負數:原碼=
補碼取反
+1 補碼=
原數的絕對值取反
+1常量是有符號的所以~2=%d=-3
有符號和無符號的區別
有符號數和無符號數進行比較運算(==,,<=,>=)時,
無符號數隱式轉化為有符號數
5.變數與常量
變數的三大特點
1) 變數的資料型別:主要說明變數佔記憶體空間大小如int
型2)
變數的作用域:作用域變數的有效性範圍,即變數的使用範圍
3) 變數的儲存型別:變數在記憶體中的儲存方式
6.全域性變數與區域性變數的區別:
從作用域看:
全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包含全域性變數定義的原始檔需要用extern
關鍵字再次宣告這個全域性變數。
區域性變數也只有區域性作用域,它是自動物件(auto
),它在程式執行期間不是一直存在,而是只在函式執行期間存在,函式的一次呼叫執行結束後,變數被撤銷,其所占用的記憶體也被收回。
從分配記憶體空間看:
全域性變數,靜態區域性變數,靜態全域性變數都在靜態儲存區分配空間,而區域性變數在棧裡分配空間。
從初始化角度看
全域性變數在沒有初始化的時候,預設為零;區域性變數在沒有初始化時值隨機。雖然全域性變數預設為0
,但是還是定義一下。
7.宣告和定義
定義:建立乙個變數,為其分配記憶體空間,並為他取名,乙個變數只能定義一次。
宣告:告知編譯器,變數名已匹配在一塊記憶體上了,但未為其分配記憶體。
宣告的分類:1.
定義性宣告:既定義又宣告
2.引用型宣告:只宣告不定義
C語言變數和資料型別總結
五 小數 六 c語言轉義字元 七 c語言識別符號 關鍵字 注釋 表示式和語句 八 c語言中的運算 九 資料型別轉換 a 123 int a 123 a 1000 a 9999 printf 格式化輸出 int a 100 int b 200 int c 300 printf a d,b d,c d ...
C 變數和資料型別
宣告在類上的變數為字段,宣告在方法內的為區域性變數。在建立乙個類的示例時,在執行建構函式之前,如果沒有給變數初始值,則編譯器會自動賦予預設值。如果變數是方法的區域性變數,編譯器會認為在使用該變數之前,必須給它顯示的設定乙個值,否則會發生 使用了未賦值的區域性變數 的錯誤。其它情況賦予預設值。如果變數...
c語言基礎之數制和資料型別
程式是為了解決問題和完 們給予的任務而存在的,它主要由演算法和資料構成。演算法是程式解決問題的方法和步驟,而資料就是演算法處理的物件。這兩這對於我們學習c都具有重要的作用,就好比我們學習英語時的單詞和語法之間的聯絡。數制是一種計數的規則。在人們使用最多的進製計數制中,表示數的符號在不同的位置上時所代...