C++基础入门

1.C语言基础

数组名是一个常量,表示数组第一个元素的地址。
变量前加&表示变量地址。
变量前加(数据类型)表示强制转化为该类型数据。

函数分文件编写一般有4个步骤
1. 创建后缀名为.h的头文件  2. 创建后缀名为.cpp的源文件
3. 在头文件中写函数的声明  4. 在源文件中写函数的定义

指针是用来保存变量地址的。可以理解为指针就是一个地址。
指针前面加*号(*p)表示解引用,可以操作指针变量指向的内存空间。
指针数据类型的定义方法为平常的数据类型(int float double char string)加*。

const修饰指针 --常量指针 --指针指向可以改,指针指向的值不可以改。
const int * p1 = &a;
const修饰常量 --指针常量 --指针指向不可以改,指针指向的值可以改。
int * const p2 = &a;
const既修饰指针,又修饰常量 --指针指向和指针指向的值都不可以修改。
const int * const p3 = &a;

指针自加(p++)表示指向下一个地址

值传递不可以修改实参,地址传递可以修改实参。
将函数中的形参改为指针可以减少内存空间。
当数组名传入到函数作为参数时,被退化为指向首元素的指针。

定义结构体时的关键字是struct,不可省略。其他情况关键字struct可以省略。
结构体指针可以通过 -> 操作符 来访问结构体中的成员

2.内存分区模型

C++程序在执行时,将内存大方向划分为4个区域
代码区  全局区  栈区  堆区

程序运行前:代码区和全局区
代码区:存放 CPU 执行的机器指令
1.代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码
2.代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令

全局区:该区域的数据在程序结束后由操作系统释放
1.全局变量【位于函数外的变量 -------------- int g_a】
2.静态变量【位于函数内用static修饰的变量 -- static int s_a】
3.全局常量【位于函数外用const修饰的常量 -- const int c_g_a】
4.字符串常量【双引号""内的内容------------- "hello world"】

程序运行后:栈区和堆区
栈区:数据由编译器自动分配释放,存放函数的形参,局部变量和局部常量
1.局部变量【位于函数内的变量 --------------- int c_a】
2.局部常量【位于函数内用const修饰的常量 -- const int c_l_a】
注意:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放,当函数执行完栈区的数据已经被释放了。 但是可以返回局部变量的值

堆区与new运算符:该区域的数据由程序员分配释放
1.C++中主要利用new在堆区开辟内存,利用new创建的数据,会返回该数据对应的类型的指针【int* a = new int(10)】,此时栈区指针a指向的内存中的值是堆区数据10的地址
2.使用delete来释放堆区的数据【delete a】
3.开辟数组【int* arr = new int[10]】释放数组【delete[] arr】

3.引用

引用:给变量起别名
语法:数据类型 &别名 = 原名
1.引用必须初始化【不可以只有引用而没有变量】
2.引用一旦初始化就不可以改变【初始化b为a的引用,b就不可以再成为c的引用】
3.一个变量可以有多个引用【一个变量可以有多个别名】
4.引用可以叠加引用【可以给别名再起别名】

引用做函数参数
函数传参时,可以使用引用传递达到地址传递的效果【代替指针】,让形参修饰实参

引用做函数返回值
1.不要返回局部变量的引用,不要返回局部变量的地址,但是可以返回局部变量的值
2.如果函数的返回值是引用,则这个函数调用可以作为左值给它赋值

引用的本质是指针常量【int& ref = a 相当于 int* const ref = &a】
1.指针常量的指向不可以修改【引用一旦初始化就不可以改变】,指向的值可以修改
2.指针常量初始化必须设置指定项【引用必须初始化】
3.可以有多个指针常量指向同一个变量【一个变量可以有多个引用】

常量引用
1.常量引用相当于const既修饰指针又修饰常量
【const int& ref = a 相当于 const int* const ref = &a】
2.加入const后就不可以修改变量了【指针指向和指针指向的值都不可以修改】
注:这里的不可修改是指不可使用引用【别名】和指针来修改变量,并非指变量不可修改,直接给变量赋值仍然可以修改变量。
3.【const int& ref = 10】是正确的,相当于【int temp = 10 const int& ref = temp】
4.使用常量引用来作为函数的形参可以防止误操作来修改实参
 

4.函数提高

函数默认参数:函数的形参列表中的形参是可以有默认值的
1.如果我们自己传入数据,函数就用我们的数据,如果没有,函数就用默认值
2.如果某个位置参数有默认值,那么从这个位置往后必须都要有默认值
3.函数的声明和实现只能有一个含有默认参数

函数占位参数
1.函数的形参列表里可以有占位参数【只有数据类型没有变量名】,调用函数时必须填补该位置
2.占位参数也可以有默认参数

函数重载:函数名可以相同
满足条件:
1.同一个作用域下 
2.函数名称相同  
3.函数参数类型不同或者个数不同或者顺序不同
注意:
1.函数的返回值不可以作为函数重载的条件
2.引用作为重载的条件
3.函数重载遇到默认参数
总而言之,在调用函数的时候只要不存在二义性编译器就可以识别,否则不能识别选用哪个函数


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值