摘要:無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動銷毀了。函數(shù)的聲明一般出現(xiàn)在函數(shù)的使用之前。函數(shù)的聲明一般要放在頭文件中的。
?我輸入strcpy后
#include#includeint main() { char arr2[] = "zhangdashuai"; char arr1[30]; char arr[40]; strcpy(arr1, arr2); strcpy(arr, "zhangdasa"); printf("%s/n%s", arr1, arr); return 0;}
?如果有小伙伴英文是在看不懂,這邊還有一個中文版的網(wǎng)站
void declarator
When used as a function return type, the void keyword specifies that the function does not return a value
但是其他的如果函數(shù)返回類型是int? float 類型的 ,那么在最后就必須加上return 相應(yīng)的類型數(shù)字。
eg:這個menu函數(shù)只是為了打印出我想要的菜單,不需要返回某個值
void menu () { printf("###################"); printf("####1.play#########"); printf("####0.noplay#######"); printf("###################");}
#includeint Add(int x, int y) { return x + y;}int main() { int a = 8; int b = 9; int c = Add(a, b); printf("%d/n", c); return 0;}
函數(shù)名的話,就是根據(jù)我們想要函數(shù)實(shí)現(xiàn)的功能,大致翻譯成英文即可。
參數(shù),接下來我通過一個代碼例子闡述參數(shù)的概念——
我現(xiàn)在想創(chuàng)造一個函數(shù),它可以把我穿進(jìn)去的數(shù)字互換一下,,假設(shè)我穿進(jìn)去a=10,b=20,
那么作用使得a=20,b=10;
上代碼
#includevoid swap(int x, int y) { int tam = x; x = y; y = tam;}int main() { int a = 10; int b = 20; printf("a=%d b=%d/n", a, b); swap(a, b); printf("a=%d b=%d/n", a, b); return 0;}
???
函數(shù)好像跟根本沒起作用,為什么???
我們要養(yǎng)成一個好習(xí)慣,拒絕伸手黨,去vs調(diào)試一下
?我們可以看到,雖然x,y的值跟a,b相等
但是發(fā)現(xiàn)他們的地址根本不一樣???
為什么?
引入?yún)?shù)的概念
我們的a,b是實(shí)參,x,y是形參,我們通過形參想改變實(shí)參的關(guān)系,結(jié)果證明我們光傳遞值是不可以的,因?yàn)閭魅雽?shí)參后,形參還會開辟一個新的空間,我是這樣理解的
void swap(int* x, int* y) { int tam = *x; *x = *y; *y = tam;}#includeint main() { int a = 10; int b = 20; printf("a=%d b=%d/n", a, b); swap(&a, &b); printf("a=%d b=%d/n", a, b); return 0;}
??我們再調(diào)試一下
發(fā)現(xiàn)現(xiàn)在x,y的地址和a,b地址相同
這個時候我們通過形參便可以改變實(shí)參的關(guān)系了。
這個時候可能會有疑問,之前我們的Add加法函數(shù)也是是傳值調(diào)用,為什么還能達(dá)到相同的目的呢?第二個swap函數(shù)的傳值調(diào)用為什么不行呢?
我是這樣理解的,有return返回值的時候,傳值調(diào)用和傳值調(diào)用都可以,但是當(dāng)沒有return返回值,只是執(zhí)行函數(shù)里面的內(nèi)容是,只有在傳址調(diào)用時才可以。
我們應(yīng)該區(qū)分出傳值調(diào)用和傳址調(diào)用。
總結(jié)
四.?函數(shù)的嵌套調(diào)用和鏈?zhǔn)皆L問
函數(shù)的嵌套調(diào)用就是一個函數(shù)里面可以包含使用另外一個函數(shù)
eg:
void first() { printf("hhe");}void seond() { printf("hdg"); first();}
注*函數(shù)可以嵌套調(diào)用,但是不能嵌套定義
eg:
void first() { printf("hhe");void first() { printf("hdg"); first();}}
這樣便是錯誤的
int Add(int x, int y) { return x + y;}#includeint main() { int a = 10; int b = 20; int c = Add(Add(a, b), b); printf("%d/n", c); return 0;}
五.函數(shù)的聲明和定義
void Printf(int x) { if (x > 9) { Printf(x / 10); } printf("%d ", x % 10);}#includeint main( ){ int m = 0; scanf("%d", &m); Printf(m); return 0;}
?可以觀察到,為什么呢?????
?因?yàn)閯傞_始必須全部完成if語句里面的,完成if后才會編譯后面的代碼,然后if語句里面全都是Printf函數(shù),所以就一直傳遞,最后不滿足條件是才會退出來,然后開始返回,也就是歸。
觀察我上面的代碼可以發(fā)現(xiàn),遞歸有限制條件,不妨花點(diǎn)時間思考一下?
如果這兩個條件有一個不滿足,會發(fā)生什么呢??——棧溢出
這個名詞也許你不太熟悉,
?這是電腦中粗存空間的區(qū)域名稱,而我們在遞歸中每調(diào)用一次函數(shù),便會在棧區(qū)開辟一塊空間,如果允許計(jì)算機(jī)一直開辟空間的話,那么區(qū)域便會裝不下,這樣的話學(xué)術(shù)人員便為這個取了一個名字——棧溢出。
我們試試棧溢出的情況
void Printf(int x) { Printf(x / 10); }#includeint main( ){ int m = 20; Printf(m); return 0;}
?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/123193.html
摘要:年月日,研究人員通過郵件列表披露了容器逃逸漏洞的詳情,根據(jù)的規(guī)定會在天后也就是年月日公開。在號當(dāng)天已通過公眾號文章詳細(xì)分析了漏洞詳情和用戶的應(yīng)對之策。 美國時間2019年2月11日晚,runc通過oss-security郵件列表披露了runc容器逃逸漏洞CVE-2019-5736的詳情。runc是Docker、CRI-O、Containerd、Kubernetes等底層的容器運(yùn)行時,此...
摘要:因?yàn)橛脩舨挥迷诘谝淮芜M(jìn)入應(yīng)用時下載所有代碼,用戶能更快的看到頁面并與之交互。譯高階函數(shù)利用和來編寫更易維護(hù)的代碼高階函數(shù)可以幫助你增強(qiáng)你的,讓你的代碼更具有聲明性。知道什么時候和怎樣使用高階函數(shù)是至關(guān)重要的。 Vue 折騰記 - (10) 給axios做個挺靠譜的封裝(報(bào)錯,鑒權(quán),跳轉(zhuǎn),攔截,提示) 稍微改改都能直接拿來用~~~喲吼吼,喲吼吼..... 如何無痛降低 if else 面...
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報(bào)率高。馬上就十一國慶假期了,給小伙伴們分享下,從小白程序員到大廠高級技術(shù)專家我看過哪些技術(shù)類書籍。 大家好,我是...
閱讀 3436·2021-11-12 10:36
閱讀 2759·2021-11-11 16:55
閱讀 2981·2021-09-27 13:36
閱讀 1628·2021-08-05 10:01
閱讀 3569·2019-08-30 15:55
閱讀 784·2019-08-30 13:01
閱讀 1920·2019-08-29 17:16
閱讀 2389·2019-08-29 16:40