zoukankan      html  css  js  c++  java
  • (6)C++ 函数

    一、基本知识

     1.为什么需要原型?

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

      首先原型告诉编译器方法存在某些参数,如果没有原型会让编译器捕获这种错误。

      其次函数把函数返回值放到cpu寄存器或内存中的指定位置,调用函数会从这个位置获取返回值。

    2.语法

    函数原型不要求提供变量名

    void cheers(int x);// x可以省略

    3.原型功能

    原型确保:

    (1)编译器正确处理函数的返回值

    (2)编译器检查使用的参数数目是否正确

    (3)编译器检查使用的参数类型是否正确,如果不正确,则转换为正确的类型

    二、参数与值传递

     函数通常按值传递,把数据复制给函数的参数。

    三、函数与数组

    (1)

    #include<iostream>
    using namespace std;
    int sum(int s[], int n);
    void main() {
    
        int ss[] = { 2,3,4 };
        int nn = 3;
        int t = sum(ss, nn);
        cout << t << endl;
        cout << sizeof(ss)<<" main"<<endl;
    }
    
    int sum(int s[],int n) {
        int total = 0;
        for (int i = 0; i < n; i++)
        {
            total += s[i];
        }
        cout << sizeof(s) << " sum" << endl;
        return total;
    }

     mian里的数组ss占12个字节,函数的数组s占4个字节,这里的s实际上是一个指针,在函数传递数组时 int s[] 相当于 int * s

     这里仍然是一个值传递,不过传递的不是数组的数值,而是一个地址。

    (2)

    int t = sum(ss+2, nn);//表示从数组第3个数开始 

    *注意传递的时候,用另一个参数指出函数数量而不是 int s[4] 写在[]里。

    函数内改变数组的内容,实际等于改变了main中ss的值。

    (3)指针与const

       const两种方法:

      1.是让指针指向常量,这种可以防止指针修改所指向的值

       

      指针指向的地址不可以修改,指向的地址的值可以修改

      2.指针本身就是常量

      指针指向的地址可以修改,指向的地址的值不可以修改

      *p+=1;会报错

       p+=1;不会报错

      age仍可以被修改

      3.既修饰指针,又修饰常量

      

       都不可变

     (4)二维数组

    四、函数与c风格字符串

    五、函数与结构

    1.值传递

     结构较小时,按值传递结构

    2.地址传递

    const

    六、函数与string

    七、函数与array

    八、递归

    九、函数指针

    函数指针用来函数当参数传递

    #include<iostream>
    using namespace std;
    int fun1(int a);//定义一个函数原型
    int fun2(int a);//定义一个函数原型
    void print(int n, int (*p)(int w));//定义一个函数原型,第二个参数为函数指针
    
    void main() {
        print(15, fun1);
        print(15, fun2);
    }
    
    int fun1(int a) {
        return a * 10;
    }
    int fun2(int a) {
        return a * 100;
    }
    void print(int n, int(*p)(int w)) {
        std::cout << p(n) << endl;
    }

    这是一个函数指针参数,由于函数名是一个地址,所以(*p)是一个地址,所以p是一个函数指针

    int (*p)(int w)
  • 相关阅读:
    Windows 下使用 GNUstep 编译并运行 Objective-C 程序
    【Objective-C】Windows下Objective-C开发环境配置
    Windows远程桌面连接Mac OS X
    Windows下编译objective-C
    自动更新开奖数据的excel文件,供大家下载
    总结一下这几天学习django的心得
    Windows上python开发--2安装django框架
    Centos 如何安装Django环境
    Centos 6.4 python 2.6 升级到 2.7
    centos启用ftp功能
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/11521306.html
Copyright © 2011-2022 走看看