您的位置:首页 > 编程语言 > C语言/C++

C语言深度剖析读书笔记

2015-03-24 20:47 155 查看
C/C++const修饰符

1,修饰变量表示只读变量

2,修饰指针const int *p; //p可变,p指向的对象不可变

int con st *p; // p 可变,p 指向的对象不可变

int*const p; // p 不可变,p 指向的对象可变

const int * const p;//指针 p 和 p 指向的对象都不可变,const在前面表示指针可变,指向的对象不可变,const在后面表示指针不可变,指向的对象可变。

3,C++中const修饰的成员变量只能在初始化列表初始化。

C中static关键字

静态全局变量

1,静态全局变量存放在全局数据区,其作用域仅为当前文件

2,未初始化的静态全局变量自动初始化为0

静态局部变量

1,静态局部变量存放在全局数据区,其作用域仅为本函数内

2,静态局部变量只在首次调用时初始化一次静态函数只在本文件内可见,不能别其他文件使用。

C++中static关键字

静态成员变量:

1,静态成员变量属于整个类共享,所有对象共用,如同C语言中的union结构,可通过两种形式访问<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>。

2,静态成员变量存放在全局数据区,但其变量名只属于本类名字空间,只能在类外初始化,初始化格式为<数据类型><类名>::<静态数据成员名>=<值>。

C++静态成员函数:

1,静态成员函数没有this指针,只能访问静态成员。

2,类外的静态函数定义不能指定关键字static。

3,可通过两种形式调用静态成员函数<类名>::<静态成员函数名> 或 <对象名>.<静态成员函数名>或<对象指针> -> <静态成员函数名>。

C/C++中register关键字

1,请求编译器尽可能将变量存放在CPU寄存器中,但不一定成功

2,register变量必需是长度小于等于整型的单个值

3,register变量可能不是存放在内存中,所以不能用&运算符号

C/C++给指定地址赋值

int p = (int )0x12ff7c;*p = 0x100;

等价于 (int )0x12ff7c = 0x100;//匿名指针变量

数组指针相对位置

int a[5][5];//定义二维数组

int (*p)[4];//数组指针,指向包含四个元素的数组

p=a;//p指向二维数组首地址

&p[4][2] - &a[4][2];//&p[4]表示的是&p[0]//+4*4*sizeof(int) ,&p[4][2]表示&a[0][0]//+4*4*sizeof(int)+2*sizeof(int)。

//&a[4][2]表示&a[0][0]+4*5*sizeof(int)+2 *sizeof(int)。

C语言堆空间分配

1,malloc与free是C++/C语言的标准库函数.

2,malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数

3,malloc返回的都是void指针,必须做强制类型转换,分配一个int空间:int p = (int)malloc [n*sizeof(int)],分配n个int空间:int p = (int)malloc[sizeof(int)]释放空间用free函数 free(p)

C++堆空间分配

1,new/delete是C++的运算符

2,new 不止是分配内存,而且会调用类的构造函数,delete会调用类的析构函数

3,new自动类型识别,分配一个int空间:int *p = new int,分配n个int空间

int *p = new int
,释放空间分别为 delete p和delete []p

函数参数传递

1,所有非数组形式的数据实参均以传值形式传递

2,数组形式做形参传递的是数组的首地址

数组和指针的对应关系

a[3] — * p

a[3][4] — (*p)[4]

&p — *&p //C++引用地址作为实参

(int*)&p 把地址强制转换为int型指针

指针数组

元素为指针变量的数组 int *p[10]

数组指针

指向int型数组的指针(数组指针):int (*p)[10];。

((void()())0)();调用保存在以首地址0的一段区域内的函数。

函数指针

指向一个返回值为指针变量的函数的指针char *(*fun)()。

函数指针数组

元素为指向一个返回值为指针变量的函数的指针的数组char *(*pf[])()

函数指针数组的指针

char ((*pf)[])()

//总结 (*p)[]数组指针, *pf[]指针数组,(*fun)()函数指针
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息