C语言深度剖析读书笔记

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[n],释放空间分别为 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)()函数指针

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值