C语言深度剖析学习心得之关键字

学习陈正冲得《C语言深度剖析》后,将学习笔记整理于此,方便自己查阅,其中知识部分来自原书,部分来自自己补充和实验,无任何商业目的,仅为学习讨论。感谢陈老师,有问题可到其blog:http://blog.csdn.net/dissection_c,进行讨论咨询


关键字


register变量必须是一个单个的值,长度应小于或等于整型的长度,不可能存放在内存中,不能用&。



static
(1)修饰变量
静态全局变量,作用域仅限于变量被定义的文件,其他文件用extern也无法使用。其存储于全局数据区,未初始化的静态全局变量,程序自


动初始化为0,想要在本文件该变量定义前使用,需要用extern;


静态局部变量,函数体内定义,同一文件的其它函数用不了,存储在内存的全局数据区,函数销毁时,该变量依旧存在,等待该函数的再次


使用。静态局部变量,其分配内存和全局变量一样,在程序运行前进行,在程序执行到该对象的声明处时被首次初始化,此后不再初始化,


若无显式初始化,则自动初始化为0


(2)修饰函数
函数前加static使函数编程静态函数,指明此时该函数的作用域仅限于本文件


(3)在c++中
静态数据成员,类数据成员的声明加上关键字static,此时该成员成为类的成员,无论这个类实例化了多少个对象,对该类的这些对象来说


,静态数据成员只分配了一次内存,供所有对象使用。也就是说,静态数据成员的值对每个对象都是一样的,可以更新。
static成员变量的初始化在类外的话,此时不能再带上static关键字,private和protected的static成员虽然可以在类外初始化,但是不能


再类外被访问。
静态数据成员初始化的格式为:
<数据类型><类名>::<静态数据成员名>=<值>
类的静态数据成员有两种访问形式:
<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>


静态成员函数,为类的全部服务,而不是为某一个类的具体对象服务,不具有this指针,无法访问非静态成员函数,也无法访问非静态数据


成员。
关于静态成员函数,可以总结为以下几点:
出现在类体外的函数定义不能指定关键字static;
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
非静态成员函数可以任意地访问静态成员函数和静态数据成员;
静态成员函数不能访问非静态成员函数和非静态数据成员;
由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:
<类名>::<静态成员函数名>(<参数表>)
调用类的静态成员函数。


http://blog.csdn.net/jsjwql/article/details/1788286




signed/unsigned
两个用补码表示的数相加时,如果最高位(符号位)有进位,进位被舍弃


case语句后面只能是整型或字符型的常量或常量表达式


在c中,不加返回值类型限定的函数,会被编译器


const修饰指针
const int *p;等价于int const *p;   p可变,p指向的内容不可变
int *const p; p不可变,即p指向一个变量,就不可指向其他对象,p指向的对象可变
const int *const p; p和p指向的内容都不可变


volatile保证程序对特殊地址的稳定访问


extern int i = 10;是否正确,声明还是定义?
倘若在工程的其他文件中没有i的定义,则这个为定义,且只能发生在main外。如果其他文件存在定义,则本句话语法不正确,只能采取
extern int i;来进行声明。


struct 柔性数组


大端模式,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中


小端模式,字数据的高字节存储在高地址,而字数据的低字节存放在低地址


可使用如下union来确定当前系统时大端还是小端


union end
{
int i;
char ch;
}e;
e.i = 1;
if(e.ch == 1)
小端;


定义数组
int a[5] = {1, 2, 3, 4, 5};
其中,a和&a是相等,但是a表示a数组中第一个元素的起始地址,而&a表示数组a的地址,区别如下:
int *p =(int *)(&a+1)表示p已经越过a数组,指向了sizeof(a)后的位置;
int *q =(int *)((int)a + 1)表示地址+1,如果a为28ff20,那么q为28ff21,如果取消a前面的int,那么q将移动sizeof(int)个位置,指向a[1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值