
以下為原文效果好一些 - -
C語言學習筆記(函數) - Muxxs學習世界note.muxxs.com
函數
函數類型 函數名(參數類型 參數名)
- 函數類型<->return的類型
- 函數若不傳回,函數類型為void
- 若無參數,參數名處為void
- 若函數在被調用處之後,應先聲明函數
1.嵌套調用
int main(){
print("%d",max(1,2,3,4)); //起點
return 0;
}
int max4(int a,int b,int c,int d){
int max2(int a,int b); //->此處max2在max4後面,需要聲明
m=max2(a,b);
m=max2(m,c);
m=max2(m,d);
return m;
}
int max2(int a,int b){
if (a>b){
return a;
}else{
return b;
}
}
2.遞歸調用
我調用我自己這種情況下每次循環都會被暫存到記憶體中,空間複雜度較大
int f(int x){
int y,z;
printf(x);
z=f(y);
return (2*z);
}
比如這個,會自己調用自己
st=>start: Start
op1=>operation: f ( x )
e=>operation: Operation
st->op1->e->op1
無 限 套 娃 3.數組作為函數參數
Example:
int max(x[10])
也可以不指定數組的大小
int max(x[])
多元數組 類比上面
int max(x[][3])
4.局部變量和全局變量
局部變量:
函數體内定義的變量
Example:
float f1(int a){
int b,c; -> b和c為局部變量
...
}
全局變量:
函數體外定義的變量
Example:
int d=10; //d->全局變量
float f1(int a){
int b,c; //-> b和c為局部變量
...
}
5. 變量的存儲方式和生存期
digraph main{
使用者區->程式區
使用者區->靜态存儲區
使用者區->動态存儲區
動态存儲區->形參
動态存儲區->沒用static聲明的變量
動态存儲區->函數調用時的現場保護和傳回位址
}
digraph main{
變量和函數 -> 資料類型
變量和函數 -> 資料的存儲類别
資料的存儲類别 -> 靜态存儲
資料的存儲類别 -> 動态存儲
}
1. 局部變量的存儲類别 * 自動變量
auto 變量類型 變量名;
**不寫auto則隐含指定為“自動存儲類别”**
調用時系統配置設定存儲空間,調用結束時釋放空間
- 靜态局部變量(static 局部變量)
靜态局部變量在調用後不釋放,仍保留原來的值 一直保留到程式運作結束 下次static的時候不指派,保留上次的值static 變量類型 變量名
- 寄存器變量(register 變量)
這種變量是存儲在寄存器當中的(速度比較快,但是不知道為啥不用了)register 變量類型 變量名
- 一個檔案内擴充外部變量作用域 & 将外部變量的作用域擴充到其他檔案
擴充後可正常使用extern 變量名
- 将外部變量作用域限制在本檔案中
static 變量類型 變量名
```dot digraph main{ 按照作用域 -> 局部變量 按照作用域 -> 全局變量 局部變量 -> 自動變量 局部變量 -> 靜态局部變量 局部變量 -> 寄存器變量 全局變量 -> 靜态外部變量 全局變量 -> 外部變量 }定義字元數組
char 變量[常量表達式];
字元型資料以ASCII 碼的形式存儲在數組中
字元數組的初始化
用初始化清單的方法
char c[3]={'O',"K","!"};
結構如下⬇️ | c[0] | c[1] | c[2] | | ---- | ---- | ---- | | O | K | ! |
也可以用這種友善的方法⬇️char c[]={"OK!"};
結構如下⬇️ | c[0] | c[1] | c[2] | c[c] | | ---- | ---- | ---- | ---- | | O | K | ! | 0 |
這種會多一個0在結尾,表示這是一個字元串引用字元數組中的元素
Example:
printf("%c",c[1]);
字元數組的輸入輸出
char c[]={"China"};
- 可以用循環 print("%c",c[n]) 輸出
- 可以用 print("%s",c) 直接輸出字元串
字元串處理函數
- puts函數
puts(字元數組)
Example:
puts(c);
-> China
- gets函數
gets(字元數組)
Example:
gets(c);
将獲得的資料指派給c
- strcat函數
字元串連接配接函數
strcat(字元數組1,字元數組2)
char str1[]={"China is"}; char str2[]={" a good country"}; printf("%sn",strcat(str1,str2));
res -> China is a good country
- strcpy和strncpy函數
字元串複制函數
strcpy(字元數組1,字元串2)
将字元串2 指派--> 字元數組1
Example:
char str1[10],str2[]={"china"}; strcpy(str1,str2);
str1的狀态為: | | | | | | | | | | | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | c | h | i | n | a | 0 | 0 | 0 | 0 | 0 |
strncpy(字元數組1,字元串2,字元數)
Example:
char str1[10],str2[]={"china"}; strncpy(str1,str2,2);
str1的狀态為: | | | | | | | | | | | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | c | h | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 字元串比較函數
strcmp(字元串1,字元串2)
比較字元串1和字元串2,自左至右逐個字元比較,直到出現不同的字元或出現
此時比較不同的這對字元的大小。
| 字元相同 | 字元串1>字元串2 | 字元串2>字元串1 | | -------- | --------------- | --------------- | | 0 | 正整數 | 負整數 |
- 字元串測長度函數
strlen(字元數組)
傳回字元數組實際值的長度
(不包括 0 )