天天看點

Linux C基礎筆記(3)

Linux C基礎筆記(3)

補充申明:Linux C基礎筆記共分為四部分,第一部分是Linux下基本指令,以及vi編輯器的使用還有C中的資料類型,第二部分為運算符、常量變量和輸入輸出。第三部分是控制語句、數組、字元串函數。第四部分為指針、函數以及配置設定記憶體管理。在寫完這四部分之後我會繼續上傳資料結構、IO、以及網絡程式設計的學習筆記,大家如果有需要學習Linux下程式設計的可以關注一下,我會将我所有的學習筆記釋出在此供大家一起學習。(在筆記裡面會有一些其他部落客的總結,如果涉及到實屬抱歉,您可以通過郵箱聯系我,我會及時修改。[email protected])。

【0】控制語句

分支語句和循環語句
	分支語句
		if...else...
			(1)簡化形式
			if(表達式)
			{
				語句塊1
			}
			else
			{
				語句塊2
			}
			(2)階梯形式
			if(表達式1)
			{
				語句塊1
			}
			else if(表達式2)
			{
				語句塊2
			}
			....
			else
			{
				語句塊n
			}
			(3)嵌套形式
			if(表達式1)
			{
				語句塊1
			}
			else if(表達式2)
			{
				if(...)
				{
					...
				}
				else if(...)
				{
					...
				}
				else 
				{
					...
				}
			}
			....
			else
			{
				語句塊n
			}

備注:多個if與多個else if詳解:
	if與多個else if是分枝情況。隻執行其中一條代碼,if與多個if是并列情況,會順序執行
    如果是多個else if的話,隻要第一個if條件成立,即使滿足else if的條件也不會執行else if及else的内容
	
	switch語句
		switch (表達式)
		{  
			case 常量表達式1:
				語句塊1;
				break;
			case 常量表達式2:
				語句塊2; 
				break;
			…
			case 常量表達式n:
				語句塊n; 
				break;
			default	:
				語句塊n+1
		}
		注意:
			switch中的表達式可以是整型或字元型表達式
			(也可以是枚舉類型,新标準的c語言允許為任意類型.)
			每個常量表達式的值必須各不相同,否則将會出現沖突。
			當表達式的值與case後面的常量表達式值相等時就執行此case後面的語句。
			“case 常量:”隻起語句标号的作用。
			break語句在switch中的作用:強行跳出switch體轉到其它某條語句,每個case後面應有一個break語句(否則程式的執行順序将改變),default分支後的break可以省略。
			各個case出現的先後順序不影響程式的執行結果.
			多個case可以執行一組語句. 
           

【1】控制語句之循環語句

注意:所有的循環語句都需要一個結束标志,如果沒有,會是一個死循環

1.goto循環(一般不介意使用,除非是在核心開發中使用)
	本質實作的是一個跳轉功能,在一個函數體内部執行跳轉
	
	next:
		....
		goto next;
	
2.while循環
	先判斷,後執行
	while(表達式)
	{
		語句塊
	}
	
		  
3.do...while循環
	先執行後判斷
	do{
		語句塊
	}while(表達式);
	
4.for循環
	for(表達式1;表達式2;表達式3)
	{
		語句塊
	}
	執行過程:
		先執行表達式1,在執行表達式2,如果表達式2成立,則執行語句塊,
		再執行表達式3,執行表達式2,如果成立,再執行語句塊
	
		表達式1:一般為對變量進行初始化
		表達式2:一般是一個判斷條件,如果不成立,則結束整個for循環
		表達式3:一般是循環語句的結束标志,如果表達式2為假,進而結束整個循環
	
			……
           

【2】數組

1.一維數組
	聲明數組  type arrayName [ arraySize ];    double balance[10];
	初始化數組 double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
		   double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
	冒泡排序:	for(i = 0;i<n-1;i++) {
			for(j = 0;j<n-1-i;j++){
				if(a[j]>a[j+1]) {
					temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;    
				}
			}
        	}
   簡單快速排序法
   每次拿前一個資料與後面的所有的資料進行比較,将最小的資料放在前一個位置,以此類推
   
2.二維數組
	聲明數組 type arrayName [ x ][ y ];
	初始化  int a[3][4] = {  
				{0, 1, 2, 3} ,   /*  初始化索引号為 0 的行 */
				{4, 5, 6, 7} ,   /*  初始化索引号為 1 的行 */
				{8, 9, 10, 11}   /*  初始化索引号為 2 的行 */
				};
	int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
	
	備注:行可以省略,列不可以省。
           

【3】字元串函數

#include <string.h>
   size_t strlen(const char *s);
	功能:計算一個字元串的長度
	參數:	s:指定的字元串的首位址
	傳回值:字元串的長度
	
#include <string.h>
	 char *strcpy(char *dest, const char *src);
 	功能:将src的資料指派給dest,包括src的\0也會一起複制
	參數:dest:目的字元串的首位址
		 src:源的字元串的首位址
	傳回值:與dest的值一樣	
注意:必須保證dest足夠大,否則會記憶體溢出

#include <string.h>
    char *strcat(char *dest, const char *src);

	功能:拼接兩個字元串,将src的資料追加到dest的後面,從destz\0的位置開始追加
	參數:dest:目的字元串的首位址
		 src:源的字元串的首位址
	傳回值:與dest的值一樣
注意:必須保證dest足夠大,否則會記憶體溢出

#include <string.h>
    int strcmp(const char *s1, const char *s2);
	功能:比較兩個字元串的内容
	參數:	s1,s2:要比較字元串
	傳回值:>0 s1 > s2
		   =0 s1 = s2
		   <0 s1 < s2

int strncmp(const char *s1, const char *s2, size_t n);
 	 功能:比較字元串前n個字元是否相等
	 參數:s1:第一個字元串,s2:第二個字元串,n 前n個字元
           

4【<string.h>】

size_t strlen(const char *s)                      求字元串長度

char *strcpy(char *dst, const char *src);         字元串複制

char *strcat(char *dse, const char *src);         字元串連結

int strcmp(const char *str1, const char *str2);   字元串比較

char *strchr(char *str,char c);                   查找字元c第一次出現的位置

char ^strstr(const char *str1,const char *str2);  查找子串h