C++远征_离港篇

本文详细介绍了C++中的引用概念,包括基本数据类型、结构体和指针类型的引用,以及引用作为函数参数的用法。同时,探讨了const在指针和引用中的应用。接着,讨论了C++的函数新特性,如函数参数默认值、函数重载和内联函数。最后,深入讲解了C++内存管理,包括内存的申请与释放、块内存的管理以及内存操作中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

离港篇

引用

引用是变量的别名

引用不能单独存在

基本数据类型的引用:
int x = 2;
int &b = x;
b = 10;
cout << x << endl; // 10
结构体类型的引用
typedef struct{
    int x;
    int y;
}Coor;

Coor c1;
Coor &c = c1;
c.x = 10;
c.y = 20;
cout << c1.x << c1.y; // 10 20
指针类型的引用

类型 *&指针引用名 = 指针;

int a = 10;
int *p = &a;
int *&q = p;
*q = 20;
cout << a << endl;
// 20
引用作函数参数
void fun(int &a,int &b)
{
    int c = 0;
    c = a;
    a = b;
    b = c;
}

int x = 10,y = 20;
fun(x,y);

const

int x = 3; //变量

变量名存储地址存储内容
x&x3

const int x = 3; // 常量

const 与 指针类型
const int *p = NULL;
int const *p = NULL;
// 上两者完全等价
int * const p = NULL;  // 此形式不同

// const 还可以加两次:
const int * const p = NULL;
int const * const p = NULL;
// 上两者完全等价
int x = 3;
const int *p = &x;
p = &y; // 正确
*p = 4; // 错误

因为 const 修饰 *p,所以 *p 不可变

特殊记忆法:

一个比较好记的方法来区分 int const p与 int const p,把*读作pointer to然后从后往前读。

第一个int const *p就可以读作 p is a pointer to const int,p是指向常量的指针

第二个int* const p就可以读作 p is a const pointer to int,p是指向int型的常指针

int const * p 指 p 的指向可以变,但是 p 的指向的那个值的内容不能变

int * const p 指 p 的指向不可以变,但是 p 的指向的那个值的内容可变

const 与 引用
int x = 3;
const int &y = x;
x = 10; // 正确
y = 20; // 错误

C++ 函数新特性

函数参数默认值
void fun(int i,int j=5,int k=10);

// 在定义时不建议加上默认值,在声明时加
void fun(int i,int j,int k) {
    cout << i << j << k;
}

有默认值的参数必须在参数表的最右端

函数重载

在相同作用域内,名称相同参数可辨

​ 用同一函数名定义的多个函数,

参数个数参数类型不同。

int getMax(int x,int y,int z)
{
    // to do
}

double getMax(double x,double y)
{
	// to do
}

如何实现重载?如上两个函数在编译后会变成

getMax_int_int_intgetMax_double_double来区分两个同名函数

内联函数

编译时将函数体代码和实参代替函数调用语句,执行效率高

内联函数关键字:inline

inline int getMax(int i,int j,int k);

内联编译是建议性的,由编译器决定

逻辑简单(甚至不能还有 循环),调用频繁的函数建议使用内联

递归函数无法使用内联方式

C++内存管理

内存的本质:资源

操作系统掌控内存资源

我们只能 申请/归还 内存资源

申请/归还 内存资源就是内存管理

运算符:

  • 申请内存 new
  • 释放内存 delete
内存的申请和释放

申请内存:

int *p = new int;

释放内存:

delete p;
块内存的申请和释放
int *arr = new int[10];

delete []arr;
内存操作注意事项

申请内存不一定能申请成功:

int *p = new int[1000];

if(NULL == p) {
    // 内存分配失败
}

释放内存注意事项:

delete p;delete[] p;
p = NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值