zoukankan      html  css  js  c++  java
  • C++学习笔记二

    一、内存分区(不同区域存放的数据,与不同的生命周期)

    1)代码区:存放函数体的二进制代码,由操作系统进行管理

    存放CPU执行的机械指令,是共享的、只读的。

    2)全局区:存放全局变量、静态变量以及常量

     

    3)栈区:存放函数的参数值和局部变量

    4)堆区:有程序员分配和释放,若程序员不释放,程序结束时,由操作系统回收。

    二、new关键字

    1)利用new关键字可以将数据开辟到堆区,

    int* p = new int(10);//指针本质也是局部变量,放在栈区,指针保存的数据存放在堆区

            2)利用new在堆区开辟数组

            int* arr = new int[10];

    三、引用(给变量起别名)

    1)基本语法

    数据类型 &别名 = 变量名;

    int a = 10;
    int &b = a;

    注意:①引用必须初始化,如int &b;是错误的;

               ②引用一旦初始化后就不能更改了,再将b指向变量c就是错误的。

    2)引用做参数

    参数传递方法:①值传递;②地址传递;③引用传递

    引用传递和地址传递的效果一样。

    //引用传递
    void swap(int& a, int& b)
    {
        int k;
        k = a;
        a = b;
        b = k;
    }

    3)引用做函数的返回值

    ①不要返回局部变量的引用

    //调用两次的结果不一样
    int& test1()
    {
        int a = 10;
        return a;
    }

    ②函数的调用可以作为左值

    int& test1()
    {
        static int a = 10;
        return a;
    }
    int main()
    {
        int &ref = test1();
        cout << ref << endl;
        test1() = 100;
        cout << ref << endl;
        system("pause");
        return 0;
    }

    4)引用的本质就是指针常量,指针常量指针指向不能改,所以引用也不能改。

    int* const ref=&a;

    5)常量引用

    作用:常量引用主要用来修饰形参,防止误操作。在函数参数列表中,可以使用const来修饰形参,防止形参改变实参。

    void showvalue(const int &a)
    {
        cout << a << endl;
    }
    int main()
    {
        int a = 10;
        showvalue(a);
        system("pause");
        return 0;
    }

    四、函数默认参数

    1)

    int add1(int a, int b = 10, int c = 20)
    {
        return a + b + c;
    }
    int main()
    {
        int a = 10;
        cout<< add1(a);
        system("pause");
        return 0;
    }

    注意:若参数列表的某个参数有默认值,那么之后的参数都要有默认值,如int add1(int a, int b = 10, int c = 20,int d)是错误的。
    2)如果函数声明有默认参数,函数实现就不能有默认参数。

    int add1(int a, int b = 10, int c = 20);
    int main()
    {
        int a = 10;
        cout<< add1(a);
        system("pause");
        return 0;
    }
    int add1(int a, int b, int c)
    {
        return a + b + c;
    }

    五、函数的占位参数

    1)语法:函数返回值 函数名(数据类型){};

    void func(int a, int)
    {
        cout << a << endl;
    }
    int main()
    {
        func(10, 10);
        system("pause");
        return 0;
    }

    2)占位参数还可以有默认值

    void func(int a, int =10)
    {
        cout << a << endl;
    }
    int main()
    {
        func(10);
        system("pause");
        return 0;
    }

    六、函数重载

    作用:函数名可以相同,提高复用性。

    函数重载满足的条件:

    ①同一个作用域下;

    ②函数名相同;

    ③函数参数类型不同,或者顺序不同,或者个数不同。

    注意:函数的类型不能作为函数重载的条件。

    1)根据参数调用相应的函数

    void func1()
    {
        cout << 10 << endl;
    }
    void func1(int a)
    {
        cout << a << endl;
    }
    int main()
    {
        int a = 100;
        func1(a);
        system("pause");
        return 0;
    }

    2)函数重载的注意事项

    ①引用作为重载条件

    void func(int& a)
    {
        ...
    }
    void func(const int& a)
    {
        ...
    }
    int main
    {
        int a=10;
        func(a);//调用func(int& a)
        func(10);//调用func(const int& a)
        ...
    }

    ②函数重载碰到默认参数,会出现二义性

    例如:

    void func(int a)
    {
       ...
    }
    void func(int a,int b=10)
    {
        ...
    }
    int main
    {
        func(10);//出现二义性
    }
  • 相关阅读:
    Educational Codeforces Round 83 --- F. AND Segments
    Educational Codeforces Round 83 --- G. Autocompletion
    SEERC 2019 A.Max or Min
    2019-2020 ICPC Southwestern European Regional Programming Contest(Gym 102501)
    Educational Codeforces Round 78 --- F. Cards
    今天我学习了一门全新的语言
    codeforces 1323D 题解(数学)
    Educational Codeforces Round 80 (Div. 2) 题解 1288A 1288B 1288C 1288D 1288E
    Educational Codeforces Round 81 (Div. 2) 题解 1295A 1295B 1295C 1295D 1295E 1295F
    Codeforces Round #617 (Div. 3) 题解 1296C 1296D 1296E 1296F
  • 原文地址:https://www.cnblogs.com/mango1997/p/14170000.html
Copyright © 2011-2022 走看看