以前在大学时学习过c++,现在都忘记的差不多了,最近公司打算利用node和c++写一个接口代理服务器,我也打算用c++重新为rrestjs框架提速,于是半个月重新看起了c++。下面是这些天的学习笔记,做下简单记录。
1、变量和指针
在C++中用“”符号表示指向
int i,j //定义整型变量i,j
int pointer_1, pointer_2 //定义指针变量pointer_1,pointer_2
指针变量pointer_1和pointer_2只能用来指向整型数据(例如i和j)
不是指针变量的一部分,
pointer_1=&i; //将变量i的地址存放到指针变量pointer_1中
pointer_2=&j; //将变量j的地址存放到指针变量pointer_2中
这样我们就得到了2个指向i和j的指针变量pointer_1和pointer_2,我们可以通过 pointer_1和pointer_2来获得 i和j的值
2、指针与数组
int p=&a[0]; //p的初值为a[0]的地址
以上等价于
int p=a;
如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。如果p的初值为&a[0],则:p+i和a+i就是a[i]的地址,同理(p+i)或者(a+i)就是数组元素,等同于a[i]
指针也可以用下标,比如p[i] 等同于 *(p+i)
3、函数与指针
指针变量也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
int max(int x,int y); //函数声明
int (p)(int,int); //定义指向函数的指针变量p
int a,b,m;
p=max; //使p指向函数max
定义形式为:函数类型(指针变量名)(函数形参表)
4、指针定义表
int i; 定义整型变量
int p; p为指向整型数据的指针变量
int a[n]; 定义整型数组a,它有n个元素
int p[n]; 定义指针数组p,它由n个指向整型数据的指针元素组成
int (p)[n]; p为指向含n个元素的一维数组的指针变量
int f( ); f为带回整型函数值的函数
int p( ); p为带回一个指针的函数,该指针指向整型数据
int (*p)( ); p为指向函数的指针,该函数返回一个整型值
int **p; p是一个指向指针的指针变量,它指向一个指向整型数据的指针变量
5、引用
对一个数据可以使用“引用”(reference),这是C++对C的一个重要扩充,引用是一种新的变量类型,它的作用是为一个变量起一个别名。
int a; //定义a是整型变量
int &b=a; //声明b是a的引用
a或b的作用相同,都代表同一变量,当引用作为函数参数传递时,可以修改实参的值。
6、结构体
就是python中的字典,js中的对象,只不过没这么灵活。
struct Student //声明一个结构体类型Student
{
int num; //包括一个整型变量num
char name[20]; //包括一个字符数组name,可以容纳20个字符
char sex; //包括一个字符变量sex
int age; //包括一个整型变量age
float score; //包括一个单精度型变量
char addr[30]; //包括一个字符数组addr,可以容纳30个字符
}; //最后有一个分号
不过C++提供了类类型,所以结构体不常用
7、结构体的new和delete
int main( )
{ Student *p; //定义指向结构体类型Student的数据的指针变量
p=new Student; //用new运算符开辟一个存放Student型数据的空间
p->name=”Wang Fun”; //向结构体变量的成员赋值
p->num=10123;
p->sex=’m’;
cout<
delete p; //撤销该空间
return 0;
}
8、共用体(union)类型
union data{
int i;
char ch;
double d;
}a,b,c;
”共用体”与“结构体”的定义形式相似。但它们的含义是不同的。结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其
自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。
特点:
a\使用共用体变量的目的是希望用同一个内存段存放几种不同类型的数据。但请注意:在每一瞬时只能存放其中一种,而不是同时存放几种
b\能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用。
c\共用体变量的地址和它的各成员的地址都是同一地址。
d\不能对共用体变量名赋值;不能企图引用变量名来得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名作为函数参数
9、用typedef声明类型
可以用typedef声明一个新的类型名来代替已有的类型名
typedef int INTEGER; //指定用标识符INTEGER代表int类型
typedef float REAL; //指定用REAL代表float类型
等同于
int i,j;
float a,b;
INTEGER i,j;
REAL a,b;