IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 每日一点小知识 -> 正文阅读

[C++知识库]每日一点小知识

auto关键字

c++中的auto关键字是根据后面的值,来自己推测前面的类型是什么,初次见是再可用迭代器的对象中。

DAY 1

C++程序执行过程中,将内存划分为四个区域:分别是

  • 代码区:存放函数的二进制代码,由操作系统进行管理。
  • 全局区:存放全局变量、常量、静态变量
  • 栈区:由编译器自动分配存放,存放函数的参数值、局部变量等。
  • 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

内存四区意义:

???????不同区域存放不同的数据,赋予不同的生命周期,灵活编程。

1.1 程序运行前

????????在程序编译后,生成了exe可执行程序,未执行程序前分为两个区域

? ? ? ? 代码区:

? ? ? ? ? ? ? ? 存放CPU执行的机器指令

? ? ? ? ? ? ? ? 代码区是共享的????????

? ? ? ? ? ? ? ? 代码区是只读的。

? ? ? ? 全局区:

? ? ? ? 全局变量和静态变量存放在此,全局区还包括常量区,字符串常量和其他常量(const修饰的变量)也存放于此。? ?

? ? ? ? 该区域的数据在程序结束后由操作系统释放。? ? ? ? ? ? ?

1.2 程序运行后

? ? ? ? 栈区:

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

? ? ? ? ? ? ? ? 注意:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放。

? ? ? ? 堆区:

? ? ? ? ? ? ? ? 由程序员分配释放,程序员不释放时,由操作系统回收。

? ? ? ? ? ? ? ? 在c++中主要利用new在堆区开辟内存。利用delete释放内存

#if 1
#include<iostream>
using namespace std;
// 堆区创建一个变量
int* test1()
{
	int* p = new int(10); //new返回的是变量的地址,因此需要指针接收
	return p;
}
// 在堆区用new开辟数组
void  test0()
{
	int *arr=new int[10]; //数组有10个元素
	for (int i = 0; i < 10; i++)
	{
		arr[i] = 100 + i;
	}
	for (int i = 0; i < 10; i++)
	{
		cout << arr[i] << endl;
	}
	//释放堆区数组的时候需要加[]
	delete[] arr;
}
int main()
{
	int* p = test1();
	cout << *p << endl;
	//堆区的释放用delete
	delete p;
	//cout << *p << endl;
	test0();
	return 0;
}
#endif
#if 1
#include<iostream>
using namespace std;
// 堆区创建一个变量
int* test1()
{
	int* p = new int(10); //new返回的是变量的地址,因此需要指针接收
	return p;
}
// 在堆区用new开辟数组
int *  test0()
{
	int *arr=new int[10]; //数组有10个元素
	for (int i = 0; i < 10; i++)
	{
		arr[i] = i + 100;
	}
	return arr;
}
int main()
{
	int* p = test1();
	cout << *p << endl;
	//堆区的释放用delete
	delete p;
	//cout << *p << endl;
	int *p1=test0();
	for (int i = 0; i < 10; i++)
	{
		cout << p1[i] << endl;
	}
	delete[] p;
	for (int i = 0; i < 10; i++)
	{
		cout << p1[i] << endl;
	}
	return 0;
}
#endif

DAY2

引用:

作用:引用相当于给变量起别名

语法:(数据类型)&别名=原名 (指向同一块内存空间)

注意事项:(1)引用必须初始化;(2)引用一旦初始化就不可以更改。

引用的本质:指针常量

#include<iostream>
using namespace std;
int main()
{
	int rats = 10;
	int& radents = rats;//引用 ==int * const radents=&a 
	cout<<"rats的地址是" << int(&rats)<<endl;
	cout << "radents的地址是" << int(&radents) << endl;
}

引用做函数参数:

作用:函数传参时,使函数中的变量名称为调用函数章的变量别名,这种方式称为按引用传递,按引用传递的时候,被调用函数的能够访问调用函数中的变量。

引用传递与值传递的不同:引用传递可以修改实参的值,但是值传递不行。

引用传递与地址传递的不同:引用传递简化了指针修改实参


#include<iostream>
using namespace std;
//值传递
void swap1(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
	//cout << "a=" << a << "," << "b=" << b << endl;
}
// 引用传递
void swapr(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a = 10;
	int b = 8;
	swap1(a, b);// 调用值传递
	cout <<"调用值传递后:" << "a=" << a << "," << "b=" << b << endl;
	swapr(a, b);
	cout << "调用引用传递后:" << "a=" << a << "," << "b=" << b << endl;
}

引用做函数返回值:

  1. 不能返回局部变量的引用,因为局部变量存放在栈区,编译器自主释放,函数执行结束后,局部变量的内存空间会释放,会导致引用失败。
  2. 函数的调用可以作为左值
int& test01()
{
	static int a = 10; //声明成静态变量,避免内存释放的问题
	return a;
}
int main()
{
	int &b = test01();
	cout << "b=" << b<<endl;
	test01() = 1000; // 如果函数的返回值是引用,函数就可以作为左值
	cout << "b=" << b<<endl;
}

常量引用:

作用:让函数传递信息,而不对信息做修改,同时向使用引用,应该使用常量引用。

方式:在函数头和函数原型中加const。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:34:21  更:2022-07-20 18:37:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:35:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码