08. 函数1

函数

函数的基础知识

  1. 没有返回值的函数称为void函数

    void functionName(parameterList)  // 定义参数的时候需要加上参数类型
    {
        statemtns;
        return;  // return可选
    }
    
  2. 有返回值的函数会return一个值,这个值会被返回给调用函数

    typeName functionName(parameterList)  // 开头写上返回值类型
    {
        statements;
        return value;
    }
    
  3. 例子

    #include <iostream>
    void cheers(int);  // 函数的原型 
    double cube(double x);
    int main()
    {
     
     using namespace std;
     cheers(5);  // 调用函数 
     cout << "输入一个数字:";
     double size;
     cin >> size;
     double volume = cube(size);
     cout << "冰块的大小是:"<<volume<<"立方米"<< endl;
     return 0;
    }
    
    void cheers(int n)
    {
     using namespace std;
     for(int i=0;i<n;i++)
     {
         cout << "干杯!";
     }
     cout << endl;
    }
    
    double cube(double x){
     return x*x*x;
    }
    
    • 在主函数main()之前要写上函数的原型,具体格式如下

      typeName/void functionName(parameteList);  // 不要求提供变量名,只需要有类型列表
      
    • 在主函数main()中调用函数

    • 原型描述了函数到编译器的接口,原型会将函数返回值的类型以及参数的类型和数量告诉编译器

    • 原型可以确保编译器正确处理函数返回值;确保编译器检查使用的参数数量是否正确;确保编译器检查使用的参数类型是否正确

函数和数组

  1. 例子:函数传递数组参数

    #include <iostream>
    const int SIZE = 8;
    int arr_he(int arr[],int n); // arr是一个指针
    int main()
    {
     using namespace std;
     int cookies[SIZE] = {1,2,45,67,12,5,8,90};
     int he = arr_he(cookies,SIZE);
     cout << "总共吃了"<< he << "个烧饼\n";
     return 0;
    }
    
    int arr_he(int arr[], int n){
     int total = 0;
     for (int i=0;i<n;i++){
         total += arr[i];
     }
     return total;
    }
    

函数和二维数组

  1. 数组名是这个数组的地址,函数的形参是指针

    1. 例子

      int he(int a1[][4],int size){
          int total = 0;
          for (int i = 0;i < size;i++){
              for (int j = 0;j<4;j++){
                  total += a1[i][j]
              }
          }
          return total;
      }
      
      • 注意,这里的形参只限定了列数是4,行数没有限制,具体行数由参数size确定

函数和字符串

  1. C-风格字符串由一系列字符组成,以空值字符结尾

  2. 将c-风格字符串作为函数的参数

    1. 字符串的方式有三种:char数组;用引号括起来的字符串常量;被设置为字符串的地址的char指针

    2. 例子

      #include <iostream>
      unsigned int c_in_str(const char * str1,char ch); // 函数原型 
      int main()
      {
        using namespace std;
        char a[15] = "minium";
        
        char *b = "next";
        
        unsigned int m = c_in_str(a,'m');
        unsigned int n = c_in_str(b,'n');
        
        cout << a << "中,总共有" << m << "个字母m" <<endl;
        cout << b << "中,总共有" << n << "个字母n" <<endl;
        
        return 0;
        
       } 
       
      unsigned int c_in_str(const char * str1, char ch){
        unsigned int count = 0;
        while (*str1){  // 当str1是\0的时候结束循环 
            if (*str1 == ch){
                count++;
            }
            str1++;  // 移动指针 
        }
        return count;
      } 
      
  3. 返回C-风格字符串的函数

    1. 例子

      #include <iostream>
      char * str(char c,int n);
      int main()
      {
        using namespace std;
        int times;
        char ch;
        
        cout << "输入一个字母:";
        cin >> ch;
        
        cout << "输入一个整数:";
        cin >> times;
        
        char * pointer = str(ch,times);
        cout << pointer<< endl;
        
        delete [] pointer;  // 不要忘记释放内存
        
        pointer = str('+',20);
        cout << pointer << "分割线" << pointer << endl;
        delete [] pointer; 
        return 0;
      }
      
      char * str(char c,int n){
          // 变量pointer的作用域是函数str,当函数结束之后这个变量的内存被释放
        char * pointer = new char[n+1];
        pointer[n] = '\0';
        while (n-->0){
            pointer[n] = c;
        }
        return pointer;
      }
      

函数和结构

  1. 传递和返回结构

    1. 例子

      #include <iostream>
      // 定义一个 结构体,表示旅行的时间 
      struct travel_time{
        int hours;
        int mins;
      };
      
      const int MIN = 60;
      
      // 结构体作为参数时的函数原型 
      travel_time sum(travel_time t1,travel_time t2);
      void show_time(travel_time t);
      
      int main()
      {
        using namespace std;
        travel_time day1 = {5,45}; // 5小时45分钟
        travel_time day2 = {3,35}; // 3小时35分钟 
        
        travel_time trip = sum(day1,day2);
        cout << "两天总共的旅行时间是:\n";
        show_time(trip); 
        
        travel_time day3 = {4,16};
        cout << "三天总共的旅行时间是:\n";
        show_time(sum(trip,day3));
        return 0;
      }
      
      travel_time sum(travel_time t1,travel_time t2){
        travel_time total;
        total.mins = (t1.mins + t2.mins)% MIN;  // 计算总共的分钟数
        total.hours = t1.hours+t2.hours + (t1.mins+t2.mins) /MIN;  // 计算总共的小时数
        
        return total;
      }
      
      void show_time(travel_time t){
        using namespace std;
        cout << "旅行小时数:" << t.hours << endl;
        cout << "旅行分钟数:" << t.mins << endl;
      }
      
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 姓名:张立斐 学号:19020700001 学院:电子工程学院 转自:https://blog.csdn.net...
    zlf阅读 369评论 0 0
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,136评论 30 470
  • 1.new 、 delete 、 malloc 、 free 关系 delete 会调用对象的析构函数 , 和 n...
    可不期诺Cappuccino阅读 859评论 0 0
  • 写在前面: 犹豫了一下,不知道该不该发这么多。毕竟题目虽全,但是其实很多人看了不到一半,估计就会默默的收藏保存,等...
    Yt_cc阅读 14,648评论 1 6
  • 本文章分为知识点、例子和心得,交流群728483370,一起学习加油! 3.函数重载 3.1非成员函数重载 3.2...
    程序爱好者阅读 558评论 0 0