《后台开发核心技术与应用实践》第一章 读书笔记
第一章 C++编程常用的技术
-
第一个C++程序
- #include<>与#include” “的区别是:#include<>用来包含系统提供的头文件#include” “用来包含程序员自己编号的头文件
- 主函数是所有C++程序的运行起始点。不管它的位置在哪里,主函数的带啊总是在程序开始运行时第一个被执行
-
函数
-
在定义函数时函数名后面括号中的变量名是形参,调用函数时,函数名后面的括号中的参数是实参
-
函数重载
C++允许用同一函数名定义多个函数,这些函数必须参数个数不同或者类型不同,这就是函数重载
-
函数模板
template<typename T>
-
-
数组
-
字符数组:就是一个用来存放字符数据的数组
strlen(str)与sizeof()的区别:
- strlen(str)是函数,只有在运行时才能计算,参数必须是字符型指针(char*),必须是’\0’结尾。当数组名作为参数传入,实际上数组已经退化成指针,它的功能是返回字符串的长度
- sizeof()是运算符,不是一个函数,在编译时计算,用于计算数据空间的字节数。sizeof不能用来返回动态分配的内存空间大小。sizeof常用于返回类型和静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
-
-
指针
-
int p1=1; //p1是一个普通的整型变量 int *p2; //p2是一个指针 p2=&p1; //把p1的地址赋值给p2
-
数组与指针
数组名代表数组第一个元素的地址。
int *p; int a[10];
p=a等价于p=&a[0],可以通过对p、a的偏移来访问数组元素,*(p+i) *(a+i)。也可以通过数组下标a[i]这种形式来访问各个元素。
-
字符串与指针
字符串指针用于存放字符串的首地址,可以改变指针使它指向不同的字符串,但不能改变所指向的字符串常量。字符串数是偶遇若干个数组元素组成的,每个元素中存放字符串的一个字符,在定义一个字符数组时,编译后就会分配一个内存单元,每个元素都有确定的地址。
-
函数与指针
函数指针是指向函数的指针变量。可以实用指针调用函数。
int func(int a); //声明一个函数 int (*f) (int a); //声明一个函数指针 f=&func;
-
-
引用
int a; int &r=a;
引用r是变量a的引用,也就是别名。**a和r占用内存的同一个存储单元,具有同一地址。**在声明引用变量时,必须进行初始化,表示它代表哪一个变量。
-
引用作为参数
使用引用传递函数参数时,内存中没有产生实参的副本,是直接对实参进行操作。使用一般变量进行传递参数时,发生函数调用,需要给形参分配存储单元,形参是实参的副本,如果传递的是对象,还要调用拷贝构造函数。
-
常引用
int a; const int &r=a;
常引用不能通过引用对目标变量的值进行修改。
-
-
结构体、公用体、枚举
-
结构体
struct 结构名{ 数据类型 成员名; ... };
用 . 来引用结构体变量中的成员。
-
公用体
union 公用体类型名{ 数据类型 成员名; ... };
一个公用体的数据共享一段内存,在不同的时间保存不同的数据类型和长度变量,同一时间只能存储其中一个成员变量的值。
可以用union判断系统是big endian 还是little endian
#include<iostream> using namespace std; union TEST{ short a; char b[sizeof(short)]; }; int mian(){ TEST test; test.a=0x0102; if(test.b[0]==0x01&&test.b[1]==0x02){ cout<<"big endian"<<endl; } else{ cout<<"little endian"<<endl; } return 0; }
-
枚举
只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。显示赋值的时候接下来的枚举子取值是前面一个枚举子的取值+1.
-
结构体、公用体在内存单元占用字节数的计算
这里要注意共用体内变量的默认内存对齐方式必须以最长的来对齐。
-
-
预处理
-
宏定义
#define 宏名 字符串
在宏定义的使用中,替换字符串是一个表达式的时候需要加括号。否则进行简单替换很容易产生误解。
-
-
do…while(0)
#define Foo(x) do{ statement one; statement two; }while(0)
这样在进行宏展开时就不会变成两个部分了。
-
条件编译
#ifdef 标识符 程序1 #else 程序2 #endif
-
extern"C"
在C/C++混合编程的环境下,这里的作用就是告诉编译器这段代码要用C标准编译,尽可能的保持C++和C的兼容性。