郝人牛語 當你成爲C語言的高手,那麼你很容易進入到操做系統的平臺裏面去;當你進入到操做系統的平臺裏去實際作程序時,就會懂得進行調試;當你懂得調試的時候,你就會發現能垂手可得地瞭解整個平臺的架構。編程 這時候,計算機基本上一切都在你的掌握之中了,沒有什麼東西能逃得出你的手掌心。數組 ——《編程箴言》 梁肇新bash 23 置身於一片很白的那種草原上(全下着大雪),而後有個小亭子,而後裏邊有一個有一個香爐,而後我就披着個斗笠,就在那亭子(棚子),而後就卡阿卡卡卡敲鍵盤。感受到很爽……如何能達到這樣的感受,要多敲。剛開始,很痛苦,一敲就會錯。學任何課程,剛開始一敲程序就錯,通過一個漫長的體力活,敲起來就會很快了(快樂)。讓人看見你(感受你)都很羨慕。敲那麼快……(思路那麼快)……app |
1.簡單語句
ide
C語言的基本結構函數
# include <stdio.h> int main(void){ printf("hello world"); return 0; }
進製表示spa
//# 整數 //# 十進制: //# 十六進制:0x 0X // 零x //# 八進制:0 // 零 int x = 314 int x = 0603 int x = 0x603 //# 浮點數 //# float: //# double: float x = 3.14F; // 不加F,默認按double處理 float x = 3.14e3; //# 字符:單引號 //# 字符串:雙引號
輸出函數printf操作系統
int i = 10; // 把i的空間存儲數字10的二進制代碼 printf("%d\n", i); // 以十進制格式,輸出i存儲的數據 /* 輸出控制符 * %d * %ld * %c * %s * %f * %lf * %o 小寫‘嘔’ * %O 大寫‘嘔’ * %x 十六進制輸出 * %X 字母大寫~ * %#x 帶前綴~ */ int i = 314; printf("number = %d\n", i); printf("%x \t%%x\n", i); printf("%X \t%%X\n", i); printf("%#x \t%%#x\n", i); /* 輸出內容以下 * [view@file 03]$ ./a.out * number = 314 * 13a %x * 13A %X * 0x13a %#x */
輸入函數scanf
//# 格式控制符與上邊一致 int i; printf("Please input a number: ", &i); scanf("%d", &i); printf("number is %d\n", i);
三目運算符
根據表達式(expression)的值,使整個表達式計算爲第二個或第三個操做數。
/* a ? b : c * b,c必須知足如下三個之一: * 1.數字類型 * 2.兼容的結構體、聯合體 * 3.指向相同類型的指針 */
逗號表達式
用途:前面的表達式產生後邊表達式的值,表達式的結果是最後一個表達式的值。
i = (x++, y = x * x, z = x + y, z * z - x * y);
2.流程控制
2.1.選擇結構
if語句
// if簡單用法 if (x == 10) puts ("x is 10"); // if...else... if (x == 10) puts ("x is 10"); else puts ("x is not 10"); // if...else if...else if (x == 1) puts ("x is 1"); else if (x == 2) puts ("x is 2"); else puts ("x is something else");
switch語句
// 檢查test-expression表達式(x) switch (x) { case 0: puts ("x is 0"); break; case 1: puts ("x is 1"); break; default: puts ("x is something else"); break; }
2.2.循環語句
while語句
int counter = 0; while (counter < 10) printf ("%d ", counter++);
do語句
int x = 0; do printf ("%d ", x++); while (x < 10);
for語句
int x; for (x = 0; x < 10; x++) printf ("%d ", x);
3.數組
聲明數組
聲明數組時,須要指定其數據類型、數組名稱、成員個數。(數組長度是個固定值)
int first_array[14];
初始化數組
// 聲明時初始化 int first_array[14] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; // 初始化起始3個元素,其餘元素爲默認值0 int first_array[14] = { 1, 2, 3, 4 }; // 使用賦值運算符賦值 int first_array[10] = { [4] = 5, [5] = 9 }; // 等於下邊效果 int second_array[10] = { [0 ... 3] = 0, [4] = 5, [5] = 9, [6 ... 9] = 0 }; // 不直接指定大小,初始化全部成員。數組大小由成員數量決定 int first_array[] { 1, 2, 3, 4, 5, 6};
數組的存儲是連續的……
int arraylist[4] = {1, 2, 3, 4}, i; for(i=0; i<4; i++) printf("arrayList[%d]: 0x%x\n", i+1, (unsigned int)&(arraylist[i])); printf("arrayList: 0x%x\n", (unsigned int)arraylist);
上邊程序運行後的結果
[view@payqa1 000 C pro]$ ./a.out arrayList[1]: 0xcaefeb80 arrayList[2]: 0xcaefeb84 arrayList[3]: 0xcaefeb88 arrayList[4]: 0xcaefeb8c arrayList: 0xcaefeb80
初始化定義一個二維數組
/* 二維數組array[i][j],看做爲一個i行j列的矩陣。 */ int two_dimensions[2][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} };
例子:定義兩個數組,計算數組的長度
// 定義數組、計算長度 int first_array[3][5] = { // 二維數組的長度是…… { 1, 2, 3, 4, 5 }, { 0 }, { 0, 0, 0, 0, 0 } }; printf("first_array %d\n", sizeof(first_array)/sizeof(first_array[0])); int second_array[5] = { 1, 2, 3, 4, 5 }; printf("second_array %d\n", sizeof(second_array)/sizeof(second_array[0])); /* 數組長度的計算方法 * sizeof()表示獲取到變量的字節值…… */ // 執行後的結果 first_array 3 second_array 5
4.函數
函數聲明時,指定函數名、參數列表、函數返回值。
/* 函數名:length * 參數列表:只有一個 * 返回值:int */ int length(int x);
定義函數
int length(int x) { int i, y; i = ( y = x*3 + 4, y + 6 ); return i; }
【指針】
指針用來保存常量或變量的內存地址。任何數據類型,包括基本類型和自定義類型,均可以建立一個指針,該指針保存該類型實例的內存地址。
# include <stdio.h> void f(int *i) { // 被調函數經過指針修改主調函數的值 *i = 330; } int main(void) { int i = 9; f(&i); printf("i = %d\n", i); return 0; }
【數組長度】
# include <stdio.h> int countLength(int *p, int lang) { int len = 0; len = (int)lang/sizeof(p[0]); // 數組的總大小 / 元素大小 return len; } int main(void) { //int arrayList[5] = { 1, 2, 3, 4, 5 }; int arrayList[2] = { 1, 2 }; // 函數外計算數組總長 printf("in function, length is %d\n.", countLength(arrayList, sizeof(arrayList))); return 0; }
【數組排序】
# include <stdio.h> // declear functions. void sort(int *,int,int); void display(int *,int,int); int mk(int *); // define functions. void sort(int * p,int len,int k) { int t,i,j; for(i=0;i<len;i++) for(j=i+1;j<len;j++) if (k == 0) if (*(p+i) > *(p+j)) { t = *(p+i); *(p+i) = *(p+j); *(p+j) = t; } else if (k == 1) if (*(p+i) < *(p+j)) { t = *(p+i); *(p+i) = *(p+j); *(p+j) = t; } else printf("The value of \"k\" is error when function \"sort()\" is running."); return; } void display(int * p,int len,int k) { if (k == 0) printf("從小到大排序\n"); else if (k == 1) printf("從大到小排序\n"); else if (k == 2) printf("沒有排過順序的數組\n"); int i; for (i=0;i<len;i++) { printf("array[%d] = %d\t",i,*(p+i)); if (i == (len-1)) printf("\n"); } return; } int mk(int * p) { int len,i; printf("輸入須要產生的數組元素的個數:"); scanf("%d",&len); for (i=0;i<len;i++) { printf("請輸入第%d個元素的數值:",i+1); scanf("%d",&( *(p+i) )); } ; return len; } int main(void) { //int a[10] = {33,234,227,36,1,22,13,8,9,7},i,k=2; int * a; int lang,k = 2; lang = mk(a); display(a,lang,k); k = 0; sort(a,lang,k); display(a,lang,k); k = 1; sort(a,lang,k); display(a,lang,k); return 0; }
5.結構體
定義結構體,使用關鍵字 struct 跟上成員聲明,放在一對大括號內、以分號結尾。
struct memberMem { char hostname[50]; char ipAddress[50]; char position[30]; float total, used; float cache, buffer; float swapIn, swapOut; }; // 末尾有個分號
聲明結構體變量
struct memberMem back, app47, app160, task;
結構體變量賦值
back.total = 8.0F; back.used = 1.23F; printf("memory total is %f, used is %f.\n", back.total, back.used);