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

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

2011-10-23 01:01 501 查看
学习陈正冲得《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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: