C語言函式!=數學函式
在C語言當中,我們會經常用到函式,但是C語言當中的函式是一段代碼塊,也叫子程式,可以被其它函式呼叫,增加代碼的復用性,
C語言的函式分為庫函式和自定義函式
庫函式
庫函式就是C語言當中本來就存在的函式,可以幫助我們實作某種功能,但是使用的時候要參考頭檔案,就比如 strcpy 就是字串拷貝函式,有兩個引數,第一個是要拷貝到的字符陣列,第二個是字符陣列的源頭,
#include<string.h>
int main()
{
char arr1[10] = "0000000";
char arr2[] = "hello";
strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
在使用庫函式的時候,一定要參考頭檔案,strcpy 的頭檔案是 #include<string.h> ,這里就是把 arr2 字串拷貝到 arr1 字串當中,拷貝的時候也會把 \0 拷過去,
還有 strcmp 庫函式,是為了對比比較兩個字串是否相等,如果相等,就回傳 0 ,要引的頭檔案也是 #include<string.h> ,
int main()
{
char arr1[10] = "hello";
char arr2[] = "hello";
if (strcmp(arr1, arr2) == 0)
{
printf("arr1與arr2相等\n");
}
return 0;
}

strcmp 這個庫函式就是為了比較兩個字串是否相等,
memset 這個庫函式是設定記憶體,有三個引數,第一個是要指向填充的記憶體塊,第二個是修改成什么字符,第三個是設定修改的大小,
int main()
{
char arr[10] = "";
(char*)memset(arr, 'x', 5);
printf("%s\n", arr);
return 0;
}
在使用 memset 函式操作的時候,是把第二個 x 覆寫到原有的字符陣列上面,就算原來字符陣列上面有字符也會被覆寫,memset 前面的 (char*) 是強制型別轉換,強制轉換成 (char*) 因為本來就是對已有的記憶體進行操作,所以強制轉換一下更安全,
自定義函式
自定義函式就是程式員自己寫一個函式去實作某些功能,自定義函式是由函式名,函式引數,回傳值型別組成,
求兩個整型中的較大值:
int Max(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int a = 3;
int b = 5;
int ret = Max(a, b);
return 0;
}
求較大值的函式名為 Max ,因為要求的是較大值,所以要回傳一個整型,所以回傳型別是整型,因為函式傳的引數是 a,b 都是整型,所以在函式里面要用整型來接收,就是 int x int y ,這里是用 x ,y 來接收的,也可以寫成 a b 傳的引數名和變數名可以一樣,
寫一個函式交換兩個變數的值,在 main 函式當中完成兩個值的交換,我們可以創建第三個變數來完成交換,那么在函式當中是否也可以這樣呢,一起來看看:
void swap(int a,int b)
{
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 3;
int b = 5;
printf("交換前 a=%d b=%d\n", a, b);
swap(a, b);
printf("交換后 a=%d b=%d\n", a, b);
return 0;
}
運行結果如下:

發現并沒有完成想要的引數交換,因為這里就涉及到形參與實參,
形參,又叫形式引數,在自定義函式的時候,括號里的就是引數,形式引數就是 main 函式里面引數的一份值拷貝,mian 函式里面的引數是實參,
實參就是在 mian 函式里面創建的引數,指向一塊記憶體,形參是實參的值拷貝,所以又拷貝了一份到另外一塊記憶體上面,指向的不是同一塊記憶體,所以對形參修改的時候只是修改了形參,并沒有對實參完成修改,所以這里要完成交換的話,就要通過形參對實參進行修改,
如何通過形參對實參進行修改
既然上面說了實參與形參操作的不是同一塊記憶體,那么只要使形參與實參指向同一塊記憶體,操作同一塊記憶體就可以完成交換了,所以就用到指標,因為通過指標,就能指向同一塊記憶體,從而通過形參操作實參,所以傳參的時候就應該傳指標,從而達到修改實參,
void swap(int* a,int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 3;
int b = 5;
printf("交換前 a=%d b=%d\n", a, b);
swap(&a, &b);
printf("交換后 a=%d b=%d\n", a, b);
return 0;
}

這里就通過指標完成了兩個數的交換,
函式的嵌套呼叫和鏈式訪問
嵌套呼叫:就是一個函式里面還能呼叫另外一個函式:
void test01()
{
printf("嵌套呼叫的函式\n");
}
void test()
{
printf("第一個函式\n");
test01();
}
int main()
{
test();
return 0;
}

從輸出結果就能看出呼叫的順序,支持函式嵌套使用,
鏈式訪問:把函式的回傳值作為另外一個函式的引數,
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}

輸出結果是 4321 因為第三個 printf 先列印出 43 因為列印了兩位數,所以回傳值是2個字符,所以列印2,2是一個字符,所以再回傳,再列印1,所以最后就是 4321 ,
函式的宣告與定義
宣告就是告訴編譯器有這個函式,引數是什么,回傳值是什么,定義就是函式的代碼,通過代碼來實作功能,就是函式的定義,
int Add(a, b); //函式的宣告
int main()
{
int a = 3;
int b = 5;
int ret = Add(a, b);
printf("%d\n", ret);
return 0;
}
Add(int a, int b) //函式的定義
{
return a + b;
}
因為如果寫宣告的話,宣告就要寫在 main 函式上面,實作寫在后面,所以為了方便,我們統一把函式寫在 main 函式上面,這樣就不用宣告了,
int Add(int a, int b)
{
return a + b;
}
int main()
{
int a = 3;
int b = 5;
int ret = Add(a, b);
printf("%d\n", ret);
return 0;
}
像這樣寫在 main 函式上面,就不用宣告函式了,就會方便很多,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290131.html
標籤:其他
上一篇:Python爬蟲:想聽榜單歌曲?使用BeautifulSoup庫只需要14行代碼即可搞定
下一篇:初始C語言(三)(C語言初階)
