栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++基础内容学习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++基础内容学习

目录

一、程序内存分区

一、代码区

二、全局区

三、栈区

四、堆区

二、引用

三、函数

一、函数默认参数

二、函数重载


一、程序内存分区

代码区和全局区均为未生成exe可执行程序前就存在的

一、代码区

1.存放cpu执行的机器指令

2.代码区共享,无论生成多少个exe文件,都使用同一个代码

3.代码区只读,防止程序生成时被修改。

二、全局区

1.存放全局变量和静态变量

2.全局区包含常量区,各种常量存放在此,注意是全局的

3.该区域数据将在程序结束后由系统自动释放

三、栈区

编译器自动分配,系统自动释放、即为平时所设变量

四、堆区

由程序员分配释放,否则由操作系统回收。

c++使用new再堆区开辟内存,delete释放

下面这段代码展示了内存分布上的不同

#include
using namespace std;
int a, b, c;
const int i = 1, j = 2;
static int k = 3, l = 4;
int main()
{
	int d, e, f;
	const int g = 1, h = 2;
	cout << "全局变量地址:n" << &a << endl
	    << &b << endl
		<< &c << endl;
	cout << "全局const修饰常量地址:n" << &i << endl
		<< &j << endl;
	cout << "static静态变量地址:n" << &k <<
		endl << &l << endl;
	cout << "局部变量地址:n" << &d << endl
		<< &e << endl
		<< &f << endl;
	cout << "局部const修饰常量地址:n" << &g <<
		endl << &h << endl;
	return 0;
}

 

二、引用

 int&b=a,b为a的引用,相当于给a起个别名,二者指向同一块内存空间

引用必须初始化,且初始化完成后不可更改。

引用可做函数参数及返回值类型

引用必须对一块合法的内存空间

#include
using namespace std;
void swap(int&a, int &b)//引用交换
{
	int ret = a;
	a = b;
	b = ret;
}
int&test()
{
	int a = 100;
	return a;
}
int main()
{
	int a = 10, b = 20, c = 30;
	int &d = a;
	cout << "d=" << d << endl;
	a = 11;
	cout << "d=" << d << endl;
	d = 12;
	cout << "a=" << a << endl;

	cout << "b=" << b << endl << "c=" << c << endl;
	swap(b, c);
	cout << "b=" << b << endl << "c=" << c << endl;

	int&f = test();//不同编译器结果不同,VS2017,两个都为随机值,同步a被销毁
	cout << "f=" << f << endl;//DEV 第一个为100,第二个为0。
	cout << "f=" << f << endl;
}

 

引用的本质是一个指针常量int*b=a会自动转化为int* const b=&a,使用时会自动解引用,其指针指向不可修改,但其所指内存空间的值可被修改。

那么 const int*b=&a,则为指针指向可改,但其所指内存的值不可更改。

常量引用 const int* connst b=&a,则为二者均不可更改 ,可防止值被修改

三、函数

一、函数默认参数
#include
using namespace std;
void fun1(int a = 1, int b = 2, int c = 3)
{
	cout << a + b + c << endl;
}
void fun2(int a,int)
{
	cout << "this is a function a=" << a << endl;
}
void fun3(int a, int b);
void fun4(int a=10, int b=10);
int main()
{
	fun1();
	fun1(10);
	fun1(10, 20);
	fun2(999,1);
	fun3(1,2);
	fun4();
	return 0;
}
void fun3(int a = 10,int b = 10)
{
	cout << a + b << endl;
}
void fun4(int a, int b)
{
	cout << a + b << endl;
}

注意:函数默认参数设置从左到右依次设值 像fun(int a=1,int b,int c=30),就是错误的。

传参也是从左到右赋值。

无变量名的参数为占位参数,传值才能调用

在设置默认参数时,声明与定义只能有一处。且在定义处声明时,函数仍参照声明,要求输入参数。

二、函数重载

函数重载必须满足以下条件:

在同一作用域下

函数名相同

函数参数类型不同或个数不同或顺序不同

注:函数返回值类型不可作为函数重载的条件

#include
using namespace std;
void fun(int a,double b=10)
{
	cout << "fun(int a,double b=10)" << endl;
}void fun(double a, int b=10)
{
	cout << "fun(double a, int b=10)" << endl;
}


void fun(char&a)
{
	cout << "fun(char&a)" << endl;
}
void fun(const char&a)
{
	cout << "fun(const char&a)" << endl;
}

int main()
{
	fun(1);
	fun(1.1);
	fun(1, 2.0);
	fun(3.14, 1);
	char a = 'c';
	fun('c');
	fun(a);
	return 0;
}

 

引用也可作为函数重载条件,同时要注意默认参数对函数重载的影响

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号