09-C語(yǔ)言函數(shù)-指趣學(xué)院

函數(shù)基本概念

  • C源程序是由函數(shù)組成的
    • 例如: 我們前面學(xué)習(xí)的課程當(dāng)中,通過(guò)main函數(shù)+scanf函數(shù)+printf函數(shù)+邏輯代碼就可以組成一個(gè)C語(yǔ)言程序
  • C語(yǔ)言不僅提供了極為豐富的庫(kù)函數(shù), 還允許用戶建立自己定義的函數(shù)冒嫡。用戶可把自己的算法編寫成一個(gè)個(gè)相對(duì)獨(dú)立的函數(shù)枫攀,然后再需要的時(shí)候調(diào)用它
    • 例如:你用C語(yǔ)言編寫了一個(gè)MP3播放器程序届囚,那么它的程序結(jié)構(gòu)如下圖所示
  • 可以說(shuō)C程序的全部工作都是由各式各樣的函數(shù)完成的,所以也把C語(yǔ)言稱為函數(shù)式語(yǔ)言

函數(shù)的分類

  • 在C語(yǔ)言中可從不同的角度對(duì)函數(shù)分類
  • 從函數(shù)定義的角度看,函數(shù)可分為庫(kù)函數(shù)和用戶定義函數(shù)兩種
    • 庫(kù)函數(shù): 由C語(yǔ)言系統(tǒng)提供,用戶無(wú)須定義,也不必在程序中作類型說(shuō)明,只需在程序前包含有該函數(shù)原型的頭文件即可在程序中直接調(diào)用衩椒。在前面各章的例題中反復(fù)用到printf论衍、scanf令花、getchar抹凳、putchar等函數(shù)均屬此類
    • 用戶定義函數(shù):由用戶按需編寫的函數(shù)鸯匹。對(duì)于用戶自定義函數(shù),不僅要在程序中定義函數(shù)本身,而且在主調(diào)函數(shù)模塊中還必須對(duì)該被調(diào)函數(shù)進(jìn)行類型說(shuō)明,然后才能使用
  • 從函數(shù)執(zhí)行結(jié)果的角度來(lái)看, 函數(shù)可分為有返回值函數(shù)和無(wú)返回值函數(shù)兩種
    • 有返回值函數(shù): 此類函數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返回一個(gè)執(zhí)行結(jié)果,稱為函數(shù)返回值。(必須指定返回值類型和使用return關(guān)鍵字返回對(duì)應(yīng)數(shù)據(jù))
    • 無(wú)返回值函數(shù): 此類函數(shù)用于完成某項(xiàng)特定的處理任務(wù),執(zhí)行完成后不向調(diào)用者返回函數(shù)值灾搏。(返回值類型為void, 不用使用return關(guān)鍵字返回對(duì)應(yīng)數(shù)據(jù))
  • 從主調(diào)函數(shù)和被調(diào)函數(shù)之間數(shù)據(jù)傳送的角度看,又可分為無(wú)參函數(shù)和有參函數(shù)兩種
    • 無(wú)參函數(shù): 在函數(shù)定義及函數(shù)說(shuō)明及函數(shù)調(diào)用中均不帶參數(shù)挫望。主調(diào)函數(shù)和被調(diào)函數(shù)之間不進(jìn)行參數(shù)傳送。
    • 有參函數(shù): 在函數(shù)定義及函數(shù)說(shuō)明時(shí)都有參數(shù),稱為形式參數(shù)(簡(jiǎn)稱為形參)狂窑。在函數(shù)調(diào)用時(shí)也必須給出參數(shù),稱為實(shí)際參數(shù)(簡(jiǎn)稱為實(shí)參)

函數(shù)的定義

  • 定義函數(shù)的目的

    • 將一個(gè)常用的功能封裝起來(lái)媳板,方便以后調(diào)用
  • 自定義函數(shù)的書寫格式

返回值類型 函數(shù)名(參數(shù)類型 形式參數(shù)1,參數(shù)類型 形式參數(shù)2泉哈,…) {
    函數(shù)體;
    返回值;
}
  • 示例
int main(){
    printf("hello world\n");
    retrun 0;
}
  • 定義函數(shù)的步驟
    • 函數(shù)名:函數(shù)叫什么名字
    • 函數(shù)體:函數(shù)是干啥的蛉幸,里面包含了什么代碼
    • 返回值類型: 函數(shù)執(zhí)行完畢返回什么和調(diào)用者

  • 無(wú)參無(wú)返回值函數(shù)定義
    • 沒(méi)有返回值時(shí)return可以省略
    • 格式:
    void 函數(shù)名() {
        函數(shù)體;
    }
    
    • 示例:
    // 1.沒(méi)有返回值/沒(méi)有形參
    // 如果一個(gè)函數(shù)不需要返回任何數(shù)據(jù)給調(diào)用者, 那么返回值類型就是void
    void printRose() {
        printf(" {@}\n");
        printf("  |\n");
        printf(" \\|/\n"); // 注意: \是一個(gè)特殊的符號(hào)(轉(zhuǎn)意字符), 想輸出\必須寫兩個(gè)斜線
        printf("  |\n");
      // 如果函數(shù)不需要返回?cái)?shù)據(jù)給調(diào)用者, 那么函數(shù)中的return可以不寫
    }
    

  • 無(wú)參有返回值函數(shù)定義
    • 格式:
    返回值類型 函數(shù)名() {
        函數(shù)體;
        return 值;
    }
    
    • 示例:
    int getMax() {
        printf("請(qǐng)輸入兩個(gè)整數(shù), 以逗號(hào)隔開, 以回車結(jié)束\n");
        int number1, number2;
        scanf("%i,%i", &number1, &number2);
        int max = number1 > number2 ? number1 : number2;
        return max;
    }
    

  • 有參無(wú)返回值函數(shù)定義
    • 形式參數(shù)表列表的格式: 類型 變量名,類型 變量2,......
    • 格式:
    void 函數(shù)名(參數(shù)類型 形式參數(shù)1,參數(shù)類型 形式參數(shù)2丛晦,…) {
        函數(shù)體;
    }
    
    • 示例:
    void printMax(int value1, int value2) {
        int max = value1 > value2 ? value1 : value2;
        printf("max = %i\n", max);
    }
    

  • 有參有返回值函數(shù)定義
    • 格式:
    返回值類型 函數(shù)名(參數(shù)類型 形式參數(shù)1奕纫,參數(shù)類型 形式參數(shù)2,…) {
        函數(shù)體;
        return 0;
    }
    
    • 示例:
     int printMax(int value1, int value2) {
        int max = value1 > value2 ? value1 : value2;
        return max;
    }
    

  • 函數(shù)定義注意
    • 函數(shù)名稱不能相同
    void test() {
    }
    void test() { // 報(bào)錯(cuò)
    }
    

函數(shù)的參數(shù)和返回值

  • 形式參數(shù)
    • 定義函數(shù)時(shí)烫沙,函數(shù)名后面小括號(hào)()中定義的變量稱為形式參數(shù)若锁,簡(jiǎn)稱形參
    • 形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。
    • 因此,形參只有在函數(shù)內(nèi)部有效,函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量
int max(int number1, int number2) //  形式參數(shù)
{
    return number1 > number2 ? number1 : number2;
}

  • 實(shí)際參數(shù)
    • 調(diào)用函數(shù)時(shí), 傳入的值稱為實(shí)際參數(shù)斧吐,簡(jiǎn)稱實(shí)參
    • 實(shí)參可以是常量又固、變量、表達(dá)式煤率、函數(shù)等,無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參
    • 因此應(yīng)預(yù)先用賦值,輸入等辦法使實(shí)參獲得確定值
int main() {
    int num = 99;
    // 88, num, 22+44均能得到一個(gè)確定的值, 所以都可以作為實(shí)參
    max(88, num, 22+44); // 實(shí)際參數(shù)
    return 0;
}

  • 形參仰冠、實(shí)參注意點(diǎn)
    • 調(diào)用函數(shù)時(shí)傳遞的實(shí)參個(gè)數(shù)必須和函數(shù)的形參個(gè)數(shù)必須保持一致
    int max(int number1, int number2) { //  形式參數(shù)
        return number1 > number2 ? number1 : number2;
    }
    int main() {
        // 函數(shù)需要2個(gè)形參, 但是我們只傳遞了一個(gè)實(shí)參, 所以報(bào)錯(cuò)
        max(88); // 實(shí)際參數(shù)
        return 0;
    }
    
    • 形參實(shí)參類型不一致, 會(huì)自動(dòng)轉(zhuǎn)換為形參類型
    void change(double number1, double number2) {//  形式參數(shù)
       // 輸出結(jié)果: 10.000000, 20.000000
       // 自動(dòng)將實(shí)參轉(zhuǎn)換為double類型后保存
       printf("number1 = %f, number2 = %f", number1, number2);
    }
    int main() {
        change(10, 20);
        return 0;
    }
    
    • 當(dāng)使用基本數(shù)據(jù)類型(char、int蝶糯、float等)作為實(shí)參時(shí)洋只,實(shí)參和形參之間只是值傳遞,修改形參的值并不影響到實(shí)參函數(shù)可以沒(méi)有形參
    void change(int number1, int number2) { //  形式參數(shù)
        number1 = 250; // 不會(huì)影響實(shí)參
        number2 = 222;
    }
    int main() {
        int a = 88;
        int b = 99;
        change(a, b);
        printf("a  = %d, b = %d", a, b); // 輸出結(jié)果: 88, 99
        return 0;
    }
    

  • 返回值類型注意點(diǎn)
    • 如果沒(méi)有寫返回值類型昼捍,默認(rèn)是int
    max(int number1, int number2) {//  形式參數(shù)
        return number1 > number2 ? number1 : number2;
    }
    
    • 函數(shù)返回值的類型和return實(shí)際返回的值類型應(yīng)保持一致识虚。如果兩者不一致,則以返回值類型為準(zhǔn),自動(dòng)進(jìn)行類型轉(zhuǎn)換
    int height() {
        return 3.14; 
    }
    int main() {
      double temp = height();
      printf("%lf", temp);// 輸出結(jié)果: 3.000000
    }
    
    • 一個(gè)函數(shù)內(nèi)部可以多次使用return語(yǔ)句,但是return語(yǔ)句后面的代碼就不再被執(zhí)行
    int max(int number1, int number2) {//  形式參數(shù)
        return number1 > number2 ? number1 : number2;
        printf("執(zhí)行不到"); // 執(zhí)行不到
        return 250; // 執(zhí)行不到
    }
    

函數(shù)的聲明

  • 在C語(yǔ)言中妒茬,函數(shù)的定義順序是有講究的:
    • 默認(rèn)情況下担锤,只有后面定義的函數(shù)才可以調(diào)用前面定義過(guò)的函數(shù)
  • 如果想把函數(shù)的定義寫在main函數(shù)后面,而且main函數(shù)能正常調(diào)用這些函數(shù)乍钻,那就必須在main函數(shù)的前面進(jìn)行函數(shù)的聲明, 否則
    • 系統(tǒng)搞不清楚有沒(méi)有這個(gè)函數(shù)
    • 系統(tǒng)搞不清楚這個(gè)函數(shù)接收幾個(gè)參數(shù)
    • 系統(tǒng)搞不清楚這個(gè)函數(shù)的返回值類型是什么
  • 所以函數(shù)聲明,就是在函數(shù)調(diào)用之前告訴系統(tǒng), 該函數(shù)叫什么名稱, 該函數(shù)接收幾個(gè)參數(shù), 該函數(shù)的返回值類型是什么
  • 函數(shù)的聲明格式:
    • 將自定義函數(shù)時(shí){}之前的內(nèi)容拷貝到調(diào)用之間即可
    • 例如: int max( int a, int b );
    • 或者: int max( int, int );
// 函數(shù)聲明
void getMax(int v1, int v2);
int main(int argc, const char * argv[]) {
    getMax(10, 20); // 調(diào)用函數(shù)
    return 0;
}
// 函數(shù)實(shí)現(xiàn)
void getMax(int v1, int v2) {
    int max = v1 > v2 ? v1 : v2;
    printf("max = %i\n", max);
}
  • 函數(shù)的聲明與實(shí)現(xiàn)的關(guān)系
    • 聲明僅僅代表著告訴系統(tǒng)一定有這個(gè)函數(shù), 和這個(gè)函數(shù)的參數(shù)肛循、返回值是什么
    • 實(shí)現(xiàn)代表著告訴系統(tǒng), 這個(gè)函數(shù)具體的業(yè)務(wù)邏輯是怎么運(yùn)作的
  • 函數(shù)聲明注意點(diǎn):
    • 函數(shù)的實(shí)現(xiàn)不能重復(fù), 而函數(shù)的聲明可以重復(fù)
    // 函數(shù)聲明
    void getMax(int v1, int v2);
    void getMax(int v1, int v2);
    void getMax(int v1, int v2); // 不會(huì)報(bào)錯(cuò)
    int main(int argc, const char * argv[]) {
        getMax(10, 20); // 調(diào)用函數(shù)
        return 0;
    }
    // 函數(shù)實(shí)現(xiàn)
    void getMax(int v1, int v2) {
        int max = v1 > v2 ? v1 : v2;
        printf("max = %i\n", max);
    }
    
    • 函數(shù)聲明可以寫在函數(shù)外面,也可以寫在函數(shù)里面, 只要在調(diào)用之前被聲明即可
    int main(int argc, const char * argv[]) {
        void getMax(int v1, int v2); // 函數(shù)聲明, 不會(huì)報(bào)錯(cuò)
        getMax(10, 20); // 調(diào)用函數(shù)
        return 0;
    }
    // 函數(shù)實(shí)現(xiàn)
    void getMax(int v1, int v2) {
        int max = v1 > v2 ? v1 : v2;
        printf("max = %i\n", max);
    }
    
    • 當(dāng)被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前時(shí),在主調(diào)函數(shù)中也可以不對(duì)被調(diào)函數(shù)再作聲明
    // 函數(shù)實(shí)現(xiàn)
    void getMax(int v1, int v2) {
        int max = v1 > v2 ? v1 : v2;
        printf("max = %i\n", max);
    }
    int main(int argc, const char * argv[]) {
        getMax(10, 20); // 調(diào)用函數(shù)
        return 0;
    }
    
    • 如果被調(diào)函數(shù)的返回值是整型時(shí),可以不對(duì)被調(diào)函數(shù)作說(shuō)明,而直接調(diào)用
    int main(int argc, const char * argv[]) {
        int res = getMin(5, 3); // 不會(huì)報(bào)錯(cuò)
        printf("result = %d\n", res );
        return 0;
    }
    int getMin(int num1, int num2) {// 返回int, 不用聲明
        return num1 < num2 ? num1 : num2;
    }
    

main函數(shù)分析

  • main的含義:
    • main是函數(shù)的名稱, 和我們自定義的函數(shù)名稱一樣, 也是一個(gè)標(biāo)識(shí)符
    • 只不過(guò)main這個(gè)名稱比較特殊, 程序已啟動(dòng)就會(huì)自動(dòng)調(diào)用它
  • return 0;的含義:
    • 告訴系統(tǒng)main函數(shù)是否正確的被執(zhí)行了
    • 如果main函數(shù)的執(zhí)行正常, 那么就返回0
    • 如果main函數(shù)執(zhí)行不正常, 那么就返回一個(gè)非0的數(shù)
  • 返回值類型:
    • 一個(gè)函數(shù)return后面寫的是什么類型, 函數(shù)的返回值類型就必須是什么類型, 所以寫int
  • 形參列表的含義
    • int argc :
      • 系統(tǒng)在啟動(dòng)程序時(shí)調(diào)用main函數(shù)時(shí)傳遞給argv的值的個(gè)數(shù)
    • const char * argv[] :
      • 系統(tǒng)在啟動(dòng)程序時(shí)傳入的的值, 默認(rèn)情況下系統(tǒng)只會(huì)傳入一個(gè)值, 這個(gè)值就是main函數(shù)執(zhí)行文件的路徑
      • 也可以通過(guò)命令行或項(xiàng)目設(shè)置傳入其它參數(shù)

  • 函數(shù)練習(xí)
    • 寫一個(gè)函數(shù)從鍵盤輸入三個(gè)整型數(shù)字,找出其最大值
    • 寫一個(gè)函數(shù)求三個(gè)數(shù)的平均值

遞歸函數(shù)(了解)

  • 什么是遞歸函數(shù)?
    • 一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用
    void function(int x){
        function(x);
    }
    
  • 遞歸函數(shù)構(gòu)成條件
    • 自己搞自己
    • 存在一個(gè)條件能夠讓遞歸結(jié)束
    • 問(wèn)題的規(guī)模能夠縮小
  • 示例:
    • 獲取用戶輸入的數(shù)字, 直到用戶輸入一個(gè)正數(shù)為止
void getNumber(){
    int number = -1;
    while (number < 0) {
        printf("請(qǐng)輸入一個(gè)正數(shù)\n");
        scanf("%d", &number);
    }

    printf("number = %d\n", number);
}
void getNumber2(){
    int number = -1;
    printf("請(qǐng)輸入一個(gè)正數(shù)abc\n");
    scanf("%d", &number);
    if (number < 0) {
//        負(fù)數(shù)
        getNumber2();
    }else{
//        正數(shù)
       printf("number = %d\n", number);
    }
}
  • 遞歸和循環(huán)區(qū)別

    • 能用循環(huán)實(shí)現(xiàn)的功能,用遞歸都可以實(shí)現(xiàn)
    • 遞歸常用于"回溯", "樹的遍歷","圖的搜索"等問(wèn)題
    • 但代碼理解難度大铭腕,內(nèi)存消耗大(易導(dǎo)致棧溢出), 所以考慮到代碼理解難度和內(nèi)存消耗問(wèn)題, 在企業(yè)開發(fā)中一般能用循環(huán)都不會(huì)使用遞歸
  • 遞歸練習(xí)

    • 有5個(gè)人坐在一起,問(wèn)第5個(gè)人多少歲?他說(shuō)比第4個(gè)人大兩歲。問(wèn) 第4個(gè)人歲數(shù),他說(shuō)比第3個(gè)人大兩歲多糠。問(wèn)第3個(gè)人,又說(shuō)比第2個(gè) 人大兩歲累舷。問(wèn)第2個(gè)人,說(shuō)比第1個(gè)人大兩歲。最后問(wèn)第1個(gè)人, 他說(shuō)是10歲夹孔。請(qǐng)問(wèn)第5個(gè)人多大?
    • 用遞歸法求N的階乘
    • 設(shè)計(jì)一個(gè)函數(shù)用來(lái)計(jì)算B的n次方

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末被盈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搭伤,更是在濱河造成了極大的恐慌只怎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闷畸,死亡現(xiàn)場(chǎng)離奇詭異尝盼,居然都是意外死亡吞滞,警方通過(guò)查閱死者的電腦和手機(jī)佑菩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)裁赠,“玉大人殿漠,你說(shuō)我怎么就攤上這事∨謇蹋” “怎么了绞幌?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)一忱。 經(jīng)常有香客問(wèn)我莲蜘,道長(zhǎng),這世上最難降的妖魔是什么帘营? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任票渠,我火速辦了婚禮,結(jié)果婚禮上芬迄,老公的妹妹穿的比我還像新娘问顷。我一直安慰自己,他們只是感情好禀梳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布杜窄。 她就那樣靜靜地躺著,像睡著了一般算途。 火紅的嫁衣襯著肌膚如雪塞耕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天嘴瓤,我揣著相機(jī)與錄音荷科,去河邊找鬼唯咬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛畏浆,可吹牛的內(nèi)容都是我干的胆胰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刻获,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜀涨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蝎毡,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厚柳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后沐兵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體别垮,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年扎谎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碳想。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毁靶,死狀恐怖胧奔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情预吆,我是刑警寧澤龙填,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拐叉,受9級(jí)特大地震影響岩遗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凤瘦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一宿礁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廷粒,春花似錦窘拯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嗤放,卻和暖如春思喊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背次酌。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工恨课, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舆乔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓剂公,卻偏偏與公主長(zhǎng)得像希俩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纲辽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容