C语言学习笔记(五):《C语言深度剖析》笔记

register变量必须是能被cpu寄存器所接受的类型。此变量必须是一个单个的值,并且其长度应小于或等于整形的长度,而且此变量可能不存放在内存中,所以不能用取址运算符“&”来获取register变量的地址。

 

静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern也没法使用。

 

由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值也不会被销毁,函数下次使用时仍然能用到这个值。

 

在多重循环中,尽可能把最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。

 

把循环嵌套控制在3层以内(有研究表明,循环嵌套超过3层时,程序员对循环的理解能力会减低)

 

C/C++任何类型的指针都可以直接赋值给void*,无需进行强制类型转换。

 

若函数不接收任何参数,要指明参数为void,例:func(void)

 

如果函数的参数可以是任意类型指针,应声明其参数为void*.

 

return语句不能返回指向“栈内存”的指针,该内存在函数体结束时被自动销毁。

 

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

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

 

union:所有的成员的起始地址一致。

 

Typedef struct stu{

      //code;

}stu_st, *stu_pst;

const stu_pst stu;     //指针不能改

stu_pst const stu;  //指针不能改

对于编译器来说,stu_pst是一个类型名,在解析时把类型名忽略了。所以const修饰的是指针。

 

斜杠(/)和星号(*)之间没有空格,才会被当作注释的开始

 

对于全局变量,必须要加注释;

注释尽量用英文,尽量避免用缩写;

注释的位置应与被描述的代码相邻,可以与语句在同一行,也可以在上一行,但不可放在下方;

对于函数的入口、出口数据给出注释;

对一系列的数字编号给出注释。

 

用反斜杠换行时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格

 

对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0;而为负数时,符号位为1,最高位是补0或补1取决于编译系统的规定。

 

移位时的位数不能小于0.

 

[]优先级高与*

 

在程序编译的过程中,注释先于预处理指令被处理

 

#pragma message

例:#ifdef _X86

       #pragma message(“_86 macro activated!”)

       #endif

 

数组:a[10]中,a是数组首元素的首地址,&a是数组的首地址,但它们的值是一样的。

 

C语言中,当一维数组做为函数参数的时候,编译器总是把它解析成一个指向其首元素首地址的指针。

 

堆:由malloc系列函数或new操作符分配的内存。其生命周期由freedelete决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错。

栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间有限。

静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在整个程序的生命周期内都存在,由编译器在编译时分配。

 

assert是一个宏,不是函数,包含在assert.h头文件中。如果其后面括号里的值为假,则程序终止运行,并提示出错;如果后面括号里的值为真,则继续运行后面的代码。这个宏只在Debug版本上起作用,而在Release版本中被编译器优化掉。

 

所有网络协议都是采用大端模式(big enddian)传输数据的

posted on 2012-09-29 15:27  Chris-Lin  阅读(207)  评论(0编辑  收藏  举报

导航