后台核心技术开发与应用实践读书笔记(一)
第1章 C++编程常用技术
1.1 第一个C++程序
-
#include<>与#include” “
后者搜索当前目录,在搜索标准目录
-
#include与#include<iostream.h>
两者是不同的,前者是C++标准为了与C语言区别开,也为了正确的命名空间,规定的头文件不带.h;
1.2 函数
-
函数的定义
-
函数重载
C++允许同一个函数名定义多个函数,但必须参数类型不同与参数个数不同。
-
函数模板
建立一个通用函数,函数类型与具体形参不指出
1.3 数组
-
数组的定义
相同类型的集合,地址是连续的
-
字符数组
- strlen与sizeof的区别
- strlen()是函数,在运行时才能计算。参数必须是字符型指针(char),且必须是以’\0’结尾*的。当数组名作为参数传入时,实际上数组已经退化为指针了。它的功能是返回字符串的长度。
- sizeof()是运算符,而不是一个函数,在编译时就计算好了,用于计算数据空间的字节数。因此,sizeof不能用来返回动态分配的内存空间的大小。sizeof常用于返回类型和静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系
- strlen与sizeof的区别
1.4 指针
-
指针概念
通过地址能找到所需的变量的单元,地址指向变量单元,因此将其形象化为指针,注意区分变量指针与指针变量
-
数组和指针
-
数组指针也成为行指针
-
指针数组不同于数组指针(优先级,第一个是()第二个是[])
数组指针
int(*p)[n]
:指向一维数组的指针,也称行指针,专门用来指向二维数组
指针数组int*p[n]
:不能p=a
,可以*p=a
赋值这里*p表示指针数组第一个元素的值,a的首地址的值
-
-
字符串和指针
1.5 引用
-
引用是什么
变量的别名,必须初始化,之后不允许改变
-
引用做参数
内存中不会产生实参的副本,而是直接对实参进行操作,因此传参效率最高,所占空间最小
-
常引用
既要提高效率又要使得传递的参数不会在函数中改变
1.6 结构体、共用体、枚举
-
概念
-
结构体
-
共用体
- 是一种特殊的类,可以定义不同的数据类型,共用一段内存。不同时间内保存不同的数据类型和长度的变量,节省了空间。注意同一时刻只能存储其中一个成员变量的值
- 利用共用体判断系统大小端
#include<iostream> using namespace std; union test{ short a; char b[sizeof(short)]; } int main(){ test t; t.a = 0x0102;//只能用共用体里面的变量 if(t.b[0] == 0x02) cout<< "大端"<<endl; else cout << "小端" << endl; return 0; }
- 几乎所有网络协议进行传输,当两台采用不同的字序,在发送数据之前必须进行字节序转换为网络字节序(大端)
-
枚举
实际生活中,变量的取值限制在一个有线的范围内(一周七天、一年十二个月),如果将这些量说明为基本类型不合适,因此就有了枚举。
注意:
- 是一种基本数据类型,而不是构造类型
- 枚举值是常量不是变量,不能进行赋值操作,如果一定要这样做,使用强制类型转换
- 只能把枚举值赋值给枚举变量
-
-
结构体、共用体内存单元字节数计算
-
64位机器上各个数据类型所占存储空间
(1)char:8bit=1byte。
(2)short:16bit=2byte。
(3)int:32bit=4byte。
(4)long:64bit=8byte。
(5)float:32bit=4byte。
(6)double:64bit=8byte。
(7)long long:64bit=8byte。其中,long类型在32位机器上只占4Byte,其他类型在32位机器和64位机器都是占同样的大小空间
-
内存计算规则
- union以最长为准
- struct各个成员变量都分配空间,且总的大小为结构体中最大的类型字节数的倍数
-
1.7 预处理
C++提供的预处理功能有:宏定义、文件包含(之前已讲)、条件编译、布局控制。
-
宏定义(进行简单的替换)
- 替换文本是一个表达式时,不加括号可能会发生错误:2+9 ->2+9*2+9
- 在带参数的宏定义的使用,也容易产生误解:area(2+2)-> 2+2*2+2
-
do …while(0)
将一组语句包成一个复合语句,以防预处理时被拆散
-
条件编译
__cplusplus是C++预定义宏,表示开发环境是C++
注意:C++语言为了支持函数重载,在编译期间会对函数名称进行一些处理,如加入参数类型和返回类型,而c语言中没有这种现象,顾不支持函数重载