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);//出现二义性
}
复制代码

 

posted @   ☞@_@  阅读(112)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示