C語(yǔ)言函數(shù)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "funcheader.h" // 自己寫(xiě)的頭文件(非C標(biāo)準(zhǔn)庫(kù)中的頭文件),導(dǎo)入時(shí)使用雙引號(hào),頭文件只包含函數(shù)原型和常量等,函數(shù)定義寫(xiě)在其他.c文件中,該頭文件中只包含了一個(gè)函數(shù)原型clear_input()用于清空輸入隊(duì)列和一個(gè)常量CONST1
void func1(void); // 函數(shù)原型/函數(shù)聲明
int main(void)
{
???? void func2(int j); // 函數(shù)原型也可以寫(xiě)在main()函數(shù)內(nèi)的聲明變量區(qū)域,但應(yīng)寫(xiě)在首次調(diào)用之前
???? int i = 53;
???? func2(i); //函數(shù)調(diào)用,main()為主調(diào)函數(shù),func2()為被調(diào)函數(shù),變量i的值53為實(shí)參,實(shí)參是值,不是變量
???? printf("%d\n", CONST1); // 調(diào)用頭文件中定義的常量
???? double d1 = 2.3;
???? double d2 = 4.4;
???? larger_of(&d1, &d2); // d1為變量,&d1表示變量的地址/指針,&d1為常量,因?yàn)樽兞康牡刂肥枪潭ǖ?,被調(diào)函數(shù)想要改變主調(diào)函數(shù)內(nèi)的變量的值需要將主調(diào)函數(shù)的變量的地址傳參給被調(diào)函數(shù),在被調(diào)函數(shù)中通過(guò)地址更改變量
???? printf("%.2f %.2f\n", d1, d2);
???? printf("%.2f\n", power(3.2, 5));
???? to_base_n(76332, 6); // 使用遞歸將一個(gè)數(shù)轉(zhuǎn)換為6進(jìn)制
???? printf("\n");
???? return 0;
}
void func1(void) // 函數(shù)定義,提供實(shí)際的代碼/實(shí)現(xiàn)。不同于函數(shù)聲明告知編譯器函數(shù)的類(lèi)型
{
????printf("func1");
}
void func2(int j) // 函數(shù)頭 ,j為形參
{ // 函數(shù)體
???? printf("%d\n", j);
???? j = 2; // 函數(shù)在調(diào)用時(shí)創(chuàng)建了int類(lèi)型的j變量/形參,并初始化為主調(diào)函數(shù)中變量(表達(dá)式)i的值,所以變量j不是i,變量j初始化為i的值(相當(dāng)于備份),j是形參,i的值是實(shí)參
}
void larger_of(double* x, double* y) // 聲明指向double類(lèi)型的指針,聲明指針變量的格式為 類(lèi)型 * 變量名,星號(hào)不再是乘號(hào)的作用,是解引用運(yùn)算符,x是指向變量d1地址的指針(x = &d1),y是指向變量d2地址的指針(y = &d2),指針的值是地址
{
???? *x = *x > *y ? *x : *y; // *x表示指針x指向的地址的值,即d1的值,x指向的地址為變量d1的地址,*x為該地址的值即d1的值,*y為d2的值,通過(guò)賦值運(yùn)算更改*x的值,即可更改主調(diào)函數(shù)中d1變量的值
???? *y = *x;
}
void to_base_n(int num, int j)
{
???? if (j < 2 || j > 10)
???? {
???????? printf("j must in 2-10");
???????? return; // 無(wú)返回值的函數(shù)使用return;將控制轉(zhuǎn)回主調(diào)函數(shù)
???? }
???? int show = num % j;
???? num = num / j;
???? if (num >= j)
???? to_base_n(num, j); // 遞歸,調(diào)用自身
???? else
???? printf("%d", num); //打印j進(jìn)制數(shù)的第一位
???? printf("%d", show); // 在遞歸之前的操作隨遞歸層數(shù)順序執(zhí)行,在遞歸之后的操作為逆序執(zhí)行,最深層遞歸先執(zhí)行,返回上一層遞歸再執(zhí)行,所以最外層的余數(shù)最后打印
}