复合类型和函数基本

学习了近一个月的C++语言后,我觉得比上一学期困难多了,先学习的复合类型和函数就非常困难,概念上的东西太难了,主要的还是概念没有实行到代码实现中,所以下一步要多多实现代码的应用上,及时复习学的内容。 在C++的学习中我觉得我还有很多不足,但是做的好的一点是预习做得好,缺点是复习不够好,我会抽出更多的时间去复习学过的内容。
以下总结一下复合类型和函数的基本内容。
复合类型
一、 指针和引用。
1、 程序运行时,代码和数据都被存储在内存中。内存是有序字节序列。每个字节都有唯一的地址,可以确定字节位置,用来存储和获取数据。
2、 指针(类型 *指针变量),获取对象的地址用取地址运算符&。
例如:int *pi=&ival;指针变量也要存储分配,存储单元是4字节。
指向指针的指针。例如:int **ppi=π
指针的类型是指针指向的对象的类型。
3、 指针不能保存非地址值,也不能被赋值或初始化为不同类型的地址值;
4、 空指针:int pi=nullptr;或int p2=0;或#include;int p3=NULL;
5、 解引用(
):如果指针指向一个对象,则可以通过指针间接访问该对象。例如:int x=100;int y=20;int pi=&x;pi=y;//间接操作pi指向X,x=y;解引用只适用于确实指向某个对象的指针,不能对空指针解引用。
6、 通用指针Viod
指针:可以持有任何类型的地址值。只能表明相关的值是一个地址,但是地址保存的对象类型不知道。不能操纵void指针指向的对象,只能传送该地址值或者与其他地址值比较。不允许直接复制。
7、 New。
系统为所有程序提供了一个运行时可用的内存池,这个内存池称为自由存储区或堆。
堆:数据空间,系统静态分配。
堆占:动态分配空间,系统申请占内存较小。
New:在堆上动态分配空间,创建对象,并返回对象的地址,返回的地址保存在指针变量中,间接访问堆上对象【new 类型(初始值)】。
分配指定类型和大小的数组,分配多个连续存储的对象【new 类型[数组大小]】。
定位new,将对象创建在已经分配好的内存中,必须包含头文件,【new (指针)类型】
例如:int
ip2 =new int(100);// int
ip2 =new int[100]。
8、 delect。new运算符分配的空间用delect释放。【delect 指针;或delect [ ]指针】
执行后,指针指向的空间被释放,不能再使用该指针内存,但是delect后的指针不是空指针,是空悬指针(指向不确定的单元)
9、 引用。在程序中,引用主要用作函数的参数。
左值引用:【类型 &引用变量=初始值】引用一旦初始化就不能再绑定到其他对象,对引用的所有操作都会被应用在它所绑定的对象上(指针可以指向其他)
右值引用:类型 &&右值引用变量=右值表达式;
左值引用转右值引用:调用标准库中定义的函数std::move()。例如:int &&r=std::move(r1)
10、 const限定指针和引用
const只读属性,只使用不修改,限定常量。
指向常量的指针;指向非const对象的指针常量;指向const对象的const指针;const限定引用。
11、 volatile限定词(限定的.对象不能被例行优化)。
对象的值可能在编译器的控制或检测之外被改变时,应该将对象声明为volatile。一般用在多线程或中断处理的程序设计中。
12、 结构体
Struct 结构体类型名{
成员声明;};
结构体的成员不能独立使用,必须由结构体类型的变量通过成员选择运算符“.”选择或者由结构体类型的指针通过“->”选择。
13、 联合(共用体) union定义
14、 枚举enum
在限定作用域的枚举中,枚举成员的名字遵循常规的作用域准则,在作用域外是不可访问的。
在不限定作用域的枚举类型中枚举成员的作用域与枚举类型本身的作用域相同。
15、 内置数组。 类型 数组名[数组大小];
一个数组不能被另一个数组初始化,也不能直接赋值给另一个数组。
访问数组元素:使用数组下标时,通常定义为size-t类型。在头文件中定义,表示内存中任意对象的大小。
数组与指针:使用数组的时候编译器一般会把它转换为指针。当使用数组作为一个outo变量的出始值时,得到的类型是指针而不是数组。
二维数组a[m][n]的元素a[i][j]在内存中的地址是a+(i
n+j)。
Begin(数组名);
End(数组名);取最后一个元素的下一个位置(第一个无效元素位置)。
16、 标准库类型string(表示可变长度的字符序列)。头文件
Getline()函数:在读取的字符串中保留输入时的空白符,遇到换行符为止。
判断string对象是否为空:empty();返回一个布尔值//if(!line.empty())。
获取string对象的长度:size();返回字符的个数。u
如果要定义存放string对象长度的变量,除了直接使用string::size_type类型,可以用auto或decltype推断变量类型
17、 标准库类型vector 【头文件】
Vector<元素类型>变量名;
Push_back()添加元素;pop_back()删除末尾的元素。
使用下表运算符可以获得vector中指定位置 的元素。下标类型:vector::size_type。
18、 文件读写。使用文件流要包含头文件.
Ifstream:输入(读文件)的文件流。
Ofstream:输出(写文件)的文件流。
Fstream:把文件连接到流对象用输入和输出(读写)。
Ios::in(只读模式);ios::out(输出模式)
函数
1、 函数定义:返回类型 函数名(参数列表) {函数体}
2、 函数调用:函数名(实参列表);实参一定是确定值的量,不是形参形式。
3、 参数传递(传值和引用)。
按值传递:简单直接,不会改变实参内容。默认情况下,函数的返回值是按值传递的,得到控制权的主调函数将接收return语句中指定的表达式副本。
引用传递:避免复制,但仍然可以访问实参对象。
传地址不安全,若指针指向重要数据区会造成大问题,传引用更好。
4、 数组参数。
数组和函数作参数时,必须传指针拷贝构造函数参数传引用。
5、 返回值。默认情况下,函数的返回值是按值传递的。
6、 返回指针或引用时,绑定内容必须是存在的,不返回局部变量。
7、 重载函数:名字相同,功能类似,参数不一样。
8、 静态局部变量:作用空间不大,生存周期很长,离开函数空间不起作用。寄存器变量:数量有限,速度特别快(直接操作),无内存地址,取地址取不出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值