zoukankan      html  css  js  c++  java
  • 【c++ primer, 5e】【函数基础】

    p182~p185:

    函数
    1、在调用函数和执行return语句的同时,也发生了控制权的转移。

    2、函数返回值不能是一个数组。(但是可以返回一个包含数组的对象,或者指向数组的指针)

    3、重要概念:名字的作用域对象的生命周期

    4、对象的生命周期分两种情况:一种是对象定义在函数体外部(包括main函数1),则对象将存在于程序的整个执行过程,第二种是对象定义在函数体内部,被称为自动变量(包括形参和普通局部变量),在块的末尾将被自动销毁。

    5、局部静态对象的生命周期是程序的整个执行过程。

    6、局部静态变量的默认初始化结果不是未定义的!!!并且,即使程序执行的路径将多次经过初始化语句,局部静态变量也只会被初始化一次(仅第一次)。

    7、函数原型=函数声明≈函数签名。

    6.1
    实参是形参的初始值,形参是函数内部执行时要用到的变量。


    6.2
    a - 返回类型不匹配
    b - 正确
    c - 花括号漏了一边。。。
    d - 正确

    6.3

    #include <iostream>
    int fact(int val)
    {
        if (val == 1)
            return 1;
        return val * fact(val - 1);
    }
    int main()
    {
         std::cout << fact(4) << std::endl; // 24
         return 0;
    }

    6.4

    #include <iostream>
    using namespace std;
    int fact(int val)
    {
        if (val == 1)
            return 1;
        return val * fact(val - 1);
    }
    int getFact()
    {
        cout << "Enter a number:" << endl;
        int x;
        cin >> x;
        return fact(x);
    }
    int main()
    {
         cout << getFact() << endl; 
         return 0;
    }

    6.5

    int abs(int x)
    {
        if (x < 0) 
            return -x;
        return x;
    }

     
    6.6
    形参和局部变量多属于自动对象,生命周期仅限于所在块的范围。
    局部静态变量将存在于程序的整个执行过程。

    #include <iostream>
    using namespace std;
    int test(int x)
    {
        cout << "==========" << endl;
        int i; // 默认初始化是未定义的!
        i += x;
        cout << "parameter val x=" << x << endl;
        cout << "local var i=" << i << endl;
        static int k; // 默认初始化为0!!!
        ++k;
        cout << "local static var k=" << k << endl;
    }
    int main()
    {
         for (int i = 0; i < 4; ++i) {
             test(i);
         }
         return 0;
    }

    调用结果:

    ==========
    parameter val x=0
    local var i=6422476
    local static var k=1
    ==========
    parameter val x=1
    local var i=6422477
    local static var k=2
    ==========
    parameter val x=2
    local var i=6422479
    local static var k=3
    ==========
    parameter val x=3
    local var i=6422482
    local static var k=4

    6.7

    int test()
    {
        static int k;
        return k++;
    }
  • 相关阅读:
    接口隔离原则(Interface Segregation Principle)ISP
    依赖倒置(Dependence Inversion Principle)DIP
    里氏替换原则(Liskov Substitution Principle) LSP
    单一指责原则(Single Responsibility Principle) SRP
    《面向对象葵花宝典》阅读笔记
    智能手表ticwatch穿戴体验
    我所理解的软件工程
    RBAC基于角色的权限访问控制
    程序员健康指南阅读笔记
    我晕倒在厕所了
  • 原文地址:https://www.cnblogs.com/xkxf/p/6571921.html
Copyright © 2011-2022 走看看