C++笔记 上

简介: C++笔记 上

C++笔记 上


创建项目,创建文件,编写代码,运行程序

Helloworld

#include<iostream>
using namespace std;
int main() 
{
    cout<<"hello world"<<endl;
    system("pause");
    return 0;
}

变量的使用

1.方便管理内存空间

2.变量创建的语法

常量

记录程序中不可以更改的数据

#define 常量名 常量 //宏常量

const 数据类型 常量名 =常量 //const修饰的变量

常量不能修改

内存四区

代码区

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

全局区

存放全局变量和静态变量以及常量

const修饰的

函数外定义的全局变量

static定义的

栈区

由编译器自动分配释放,存放函数的参数值,局部变量

形参在栈区

注意事项:

不要返回栈区的地址

存放在了栈区,函数执行完了之后释放

第一次解引用时可以取到数据,因为编译器做了保留,第二次不可以

堆区

由程序员分配和释放,若程序员不释放,程序结束由操作系统回收

利用new可以在堆区开辟数据

分区是为了灵活编程,生存周期不一样

程序执行前有代码区和全局区

代码区是共享和可读的

new

int *p=new int(10);

int* func(){

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

return p;

}

int main(){

//在堆区开辟数据

int *p=func();

}

delete p;

创建数组

int *arr=new int[10];

for(int =0;i<10;i++){

arr[i]=i+100;

}

delete[] arr;

C++中的引用

1.

给变量起一个别名

int a=10;

数据类型 &别名=原名;

注意事项

引用必须初始化,不能int &b;

初始化之后就不能改变了,不能变更成c的别名

引用做函数参数

有值传递和地址传递

值传递不可以修饰实参,地址传递可以

地址传递

void myswap0(int *a,int *b){
•   int temp=*a;
•   *a=*b;
•   *b=temp;
}
myswap(&a,&b);

传地址,用指针接收

引用传递

void myswap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
myswap(a,b);

引用做函数的返回值

不要返回局部变量的引用

函数的调用可以作为左值

int& test01(){
•   int a=10;
•   return 0;
}
int main(){
•   int &ref=test01();
}
//不要返回局部变量的引用

第一次正确,编译器做了保留,第二次不行

int& test02(){
    static int a=10;        //静态变量
    return 0;
}
int &ref2=test02();
test02()=1000;
//可以作为左值

函数的返回值是引用,这个函数调用可以作为左值

引用的本质

本质在C++内部的实现是一个指针常量

int& ref=a;

内部转换为int *const ref=&a;

ref=20;

内部会发现是引用,自动为我们转换为*ref=20;

本质是指针常量

所有的指针的操作都是编译器帮我们做了

常量引用

堆区和栈区都是可以直接引用的,引用必须引用一块合法的空间

int &ref=10;是错误的

const int &ref=10;是正确的

const int &ref=10;编译器做的操作是int temp=10;const int &ref=temp;

加入const之后是只读不可修改

使用场景

int a=100;

void showValue(const int &Val){

//Val会报错

cout <<Val<<endl;

}

函数高级

函数的默认参数

返回值类型 函数(数据类型 变量名=默认值)

注意

1.某个位置有了默认参数,这个位置从左向右都必须有默认值

2.没有传入就是默认值,传入就是传入的数据

3.函数的声明有默认的参数,函数的实现就不能有默认的参数了

声明和实现只能有一个有默认参数

函数占位参数

void func(int a,int){
cout <<“this is func”<<endl;
}
func(10,10);


相关文章
|
5月前
|
算法 C++
算法笔记:递归(c++实现)
算法笔记:递归(c++实现)
|
5月前
|
编译器 C++
《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记
《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记
|
3月前
|
C++ 容器
【C/C++笔记】迭代器
【C/C++笔记】迭代器
27 1
|
3月前
|
存储 安全 程序员
【C/C++笔记】迭代器范围
【C/C++笔记】迭代器范围
68 0
|
4月前
|
C++ Windows
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
在Windows上使用Visual Studio 2022进行FFmpeg和SDL2集成开发,首先安装FFmpeg至E:\msys64\usr\local\ffmpeg,然后新建C++控制台项目。在项目属性中,添加FFmpeg和SDL2的头文件及库文件目录。接着配置链接器的附加依赖项,包括多个FFmpeg及SDL2的lib文件。在代码中引入FFmpeg的`av_log`函数输出"Hello World",编译并运行,若看到"Hello World",即表示集成成功。详细步骤可参考《FFmpeg开发实战:从零基础到短视频上线》。
177 0
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
|
6月前
|
存储 C++ 容器
黑马c++ STL部分 笔记(7) list容器
黑马c++ STL部分 笔记(7) list容器
|
6月前
|
算法 C++ 容器
黑马c++ STL常用算法 笔记(5) 常用算术生成算法
黑马c++ STL常用算法 笔记(5) 常用算术生成算法
|
6月前
|
算法 C++ 容器
黑马c++ STL常用算法 笔记(4) 常用拷贝和替换算法
黑马c++ STL常用算法 笔记(4) 常用拷贝和替换算法
|
6月前
|
存储 算法 搜索推荐
黑马c++ STL常用算法 笔记(3) 排序算法
黑马c++ STL常用算法 笔记(3) 排序算法
|
6月前
|
算法 C++
黑马c++ STL常用算法 笔记(2) 查找算法
黑马c++ STL常用算法 笔记(2) 查找算法