日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++(12)--函数基础:按值传递、传递数组、函数指针

發(fā)布時間:2023/12/13 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++(12)--函数基础:按值传递、传递数组、函数指针 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模塊化編程--函數(shù)

  • 1. 函數(shù)基本知識
  • 2. 函數(shù)的參數(shù)
    • 2.1 按值傳遞機制(小議按引用傳遞)
    • 2.2 使用數(shù)組做函數(shù)參數(shù)(用戶頭文件,const的防改)
    • 2.3 使用二維數(shù)組作為函數(shù)的參數(shù)
    • 2.4 使用函數(shù)指針作為函數(shù)的參數(shù)
      • 2.4.1 函數(shù)指針的基本內(nèi)容
      • 2.4.2 函數(shù)指針數(shù)組的聲明
      • 2.4.3 auto
      • 2.4.4 使用typedef 定義函數(shù)指針類型

《老九學堂C++課程》《C++ primer》學習筆記。《老九學堂C++課程》詳情請到B站搜索《老九零基礎(chǔ)學編程C++入門》
-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------

1. 函數(shù)基本知識

函數(shù)分類:

  • 內(nèi)置函數(shù)(STL,Boost C++)
  • 自定義函數(shù)(focus on)
  • C++ Standard Library(C 標準函數(shù),輸入/輸出,數(shù)值,診斷,通用工具,國際化,語言支持,STL(迭代器,算法, 容器))

    Boost C++:可移植,開源的代碼庫

    函數(shù)三要素:返回值類型,函數(shù)名,參數(shù)列表

    return_type functionName(parametersList){//函數(shù)體 }

    自定義函數(shù)的完整寫法:函數(shù)原型+函數(shù)調(diào)用+函數(shù)定義

    int sum(int, int); // 函數(shù)原型,描述函數(shù)到編譯器的接口,提前告訴編譯器一聲。不需要寫參數(shù)名,以分號結(jié)尾 int main(){// 函數(shù)調(diào)用int result = sum(5,3); } // 函數(shù)定義 int sum(int num1, int num2){// 函數(shù)實現(xiàn)的代碼return num1 + num2 }

    注意:
    1.函數(shù)原型和函數(shù)定義的頭部類似,函數(shù)原型以分號結(jié)尾
    2.函數(shù)原型中的參數(shù)名稱可以省略,只寫參數(shù)類型
    3. C++返回值類型不能是數(shù)組,但是可以是其他任何類型(可以將數(shù)組做為結(jié)構(gòu)或者對象的組成部分返回)

    dmeo: 計算長方體和圓柱體的體積

    //1.定義兩個函數(shù),分別用來計算兩種形狀的體積 //2.在mian 函數(shù)中用戶可以選擇計算某個形狀的體積 void calcCuboid(); // 計算長方體的體積 void calcCylinder(); // 計算圓柱體的體積int main(){int choice = -1;while(choice){cout << "1. 計算長方體體積" << endl;cout << "2. 計算圓柱體的體積" << endl;cout << "0. 退出" << endl;cin >> choice;switch(choice){case 1:calcCuboid();break;case 2:calcCylinder();break;}}cout << "感謝使用本軟件,覺得好用點個贊唄!" << endl;return 0; }void calcCuboid(){// 輸出長寬高double len, width, height;cout << "請輸入長寬高:" ;cin >> len >> width >> height;// 計算體積double v = len * width * height;cout << "長方體的體積為:" << v << endl; } void calcCylinder(){double radius, height;cout << "請輸入半徑和高:";cin >> radius >> height;// 計算體積, pow 的頭文件 cmathdouble pi = 4 * atan(1.0); // arctan(1.0) 為45度角的弧度表示,pi為其4倍數(shù)// double v = 3.14 * pow(radius, 2) * height;double v = pi * pow(radius, 2) * height;cout << "圓柱體的體積為:" << v << endl; }

    2. 函數(shù)的參數(shù)

    2.1 按值傳遞機制(小議按引用傳遞)

    按值傳遞:給函數(shù)傳遞變量時,變量值不會直接傳遞給函數(shù),而是先制作變量值的副本,原始變量被存在棧上,將這個副本傳遞給函數(shù)。

    void change(int); int main(){int num = 9;change(num);cout << "num = " << num << endl;return 0; } void change(int num){num++; } num = 9

    如果傳遞的是引用,那么原變量的值將會改變(引用,傳遞的是地址,改變的是地址中的值)

    void change(int&); int main(){int num = 9;change(num);cout << "num = " << num << endl;return 0; } void change(int &num){// 傳遞了引用,地址num++; } num = 10

    2.2 使用數(shù)組做函數(shù)參數(shù)(用戶頭文件,const的防改)

    1.數(shù)組作為函數(shù)參數(shù)時,只傳遞數(shù)組的首地址,并不傳遞整個數(shù)組空間
    2.當數(shù)組名為實參時,數(shù)組首地址指針被傳遞到函數(shù)中

    使用函數(shù)升級《小公主養(yǎng)成記》-- 函數(shù)放在自己寫的頭文件中(.h結(jié)尾),在.cpp文件中include

    頭文件princess.h編寫:

    // 使用函數(shù)升級《小公主養(yǎng)成記》中基本屬性的輸入和排序功能 // 基本屬性: 體力, 智力, 魅力, 道德, 氣質(zhì) #include <iostream>using namespace std; // 函數(shù)定義 // 給一個數(shù)組 void input(int [], int); void show(int [], int); //自行完成刪除和修改數(shù)組元素// 函數(shù)實現(xiàn) void input(int values[], int len){//int values[] 這么定義形參,傳遞數(shù)組的時候傳遞的是數(shù)組的指針//傳數(shù)組時只有指針,建議再傳一個數(shù)組長度if(len > 5){cout << "數(shù)組長度只能是5以內(nèi),越界了" << endl;return; // 退出返回值為void的函數(shù)}string valueNames[] = {"體力", "智力", "魅力", "道德", "氣質(zhì)"};for(int i=0; i < len; i++){cout << valueNames[i] << ":" ;cin >> values[i];} }void show(int values[], int len){string valueNames[] = {"體力", "智力", "魅力", "道德", "氣質(zhì)"};for(int i = 0; i < len; i++){cout << valueNames[i] << ":" << values[i] << endl;} }

    .cpp中導入自己寫的頭文件

    #include <iostream> #include "princess.h" // 自己寫的頭文件使用雙引號就可以了 using namespace std; int main(){int values[5];input(values, sizeof(values)/sizeof(int));show(values,5);return 0; }

    傳遞數(shù)組參數(shù)時,不希望改動數(shù)組中的元素,在定義可以使用const 關(guān)鍵字

    void show(const int [], int); int main(){int valueArray[] = {90, 56, 67, 89, 100};return 0; } void show(const int valueArray[], int len){for(int i = 0; i < len; i++){// cout << valueArray[i]++ << endl; ?,編譯不給過,告訴你只讀cout << valueArray[i]<< endl; } }

    2.3 使用二維數(shù)組作為函數(shù)的參數(shù)

    void show_2d(double (*)[5],int); int main(){double valueArray[3][5] ={{45.5, 46.6, 47.7},{12.2, 13.3, 14.4},{15.5, 16.6, 17.7}};show_2d(valueArray, 3);return 0; } //void show_2d(double valueArray[][5], int len) 兩種頭部書寫方式都可以 void show_2d(double (*valueArray)[5], int len){for(int i = 0; i < len; i++){for(int j = 0; j < 5; j++){cout << *(*(valueArray +i) + j) << ",";}cout << endl;} }

    2.4 使用函數(shù)指針作為函數(shù)的參數(shù)

    2.4.1 函數(shù)指針的基本內(nèi)容

    函數(shù)的地址是其機器語言代碼在內(nèi)存中存放的首地址
    好處:將函數(shù)當作參數(shù)來傳遞,可以在不同的時間使用不同的函數(shù)
    注意點:現(xiàn)有函數(shù),先聲明函數(shù)指針,再用函數(shù)指針指向需要的函數(shù)
    使用場景:在很多函數(shù)調(diào)用的情況下,使用函數(shù)指針簡化函數(shù)調(diào)用。

    使用函數(shù)指針來指向一個函數(shù)的地址,函數(shù)指針的聲明

    //函數(shù)原型 double sum(double, double); //函數(shù)指針聲明, 一個指向函數(shù)的指針 ? double (*ptrSum)(double, double); //返回值是double * 的函數(shù), 達不到聲明函數(shù)指針的效果 double *ptrSum(double, double);

    demo1:用戶冪函數(shù)的實現(xiàn)與對應的指針

    #include "funptr.h" int main(){// 聲明函數(shù)指針int (*ptrmypower)(int, int);// 讓指針指向函數(shù)ptrmypower = my_power;// 用函數(shù)指針調(diào)用函數(shù)cout << ptrmypower(2, 3) << endl;cout << (*ptrmypower)(2,3) << endl;cout << my_power(2, 3) << endl;return 0; }

    funptr.h 文件內(nèi)容

    int power(int, int);int my_power(int num1, int num2){int result = 1;for(int i = 0; i < num2; i++){result *= num1;}return result; }

    demo2:使用函數(shù)指針實現(xiàn)加減乘除運算

    #include "mycalc.h" int main(){// 定義函數(shù)指針double (*ptrCalc)(double, double);double num1, num2;char op;cout << "請輸入兩個運算數(shù)字" << endl;cin >> num1 >> num2;cout << "請輸入運算符" << endl;cin >> op;// seitch 語句只用來給函數(shù)指針賦值switch(op){case '+':// 調(diào)用加法函數(shù)ptrCalc = addtion;break;case '-':// 調(diào)用減法函數(shù)ptrCalc = subtraction;break;case '*':// 調(diào)用乘法函數(shù)ptrCalc = multiplication;break;case '\\':// 調(diào)用除法函數(shù)ptrCalc = division;break;}print_result(ptrCalc, num1, num2);return 0; }

    mycalc.h 中的內(nèi)容

    // 自定義計算器,使用函數(shù)指針 #include <iostream> using namespace std; /** 加法 */ double addtion(double, double); /** 減法 */ double subtraction(double, double); /** 乘法 */ double multiplication(double, double); /** 除法 */ double division(double, double); /** 打印結(jié)果*/ void print_result(double (*)(double, double), double, double); // 把后兩個duuble 傳遞給前面的函數(shù)指針ptrCalcvoid print_result(double (*ptrCalc)(double, double), double num1, double num2){// 調(diào)用函數(shù),打印結(jié)果double result = ptrCalc(num1, num2);cout << "運算結(jié)果" << result << endl; }double addtion(double num1, double num2){return num1 + num2; } double subtraction(double num1, double num2){return num1 - num2; }double multiplication(double num1, double num2){return num1 * num2; }double division(double num1, double num2){if(num2 == 0){cout << "除數(shù)不能為0" << endl;return 0;}else{return num1 / num2;} }

    2.4.2 函數(shù)指針數(shù)組的聲明

    –自行實踐

    double (*ptrCalc[])(double, double)

    2.4.3 auto

    函數(shù)指針的聲明比較麻煩,C++ 11 中可以使用auto ptrFunc = addition; 實現(xiàn)函數(shù)類型的自動診斷(自動診斷需要確保變量的類型和賦值的類型一致),就可以不需要函數(shù)指針聲明。

    // double (*ptrCalc)(double, double);auto ptrCalc = addtion; // 必須初始化,遇到具體計算需求時,在賦予新的函數(shù)地址(如后續(xù)需要求減法)

    2.4.4 使用typedef 定義函數(shù)指針類型

    typedef double (*ptrCalc)(double, double); // 定一個了一個函數(shù)指針類型ptrCalc ptrCalc1;

    總結(jié)

    以上是生活随笔為你收集整理的C++(12)--函数基础:按值传递、传递数组、函数指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。