读书笔记《c语言深入剖析》

第一章:关键字

1.1、register

@@register 变量可能不存放与内存中,因此,不能使用“&”来对访问变量的地址。

1.2、static

@@静态全局变量:作用域仅限于所定义的文件中,其他文件使用extern关键字也无法访问;

@@静态局部变量:函数体内定义的static变量,储存于静态存储区,只能在此函数体中进行使用,其他函数不能访问(函数声明static变量后,该函数将不可重入。)

@@静态函数:此函数外部文件不能进行访问,可起到保护作用。

1.3、基本数据类型:

@@long 和int的区别:

《C和指针》中写过:long与int:标准只规定long不小于int的长度,int不小于short的长度。(我记的好像是这样)

16位系统:long是4字节,int是2字节

32位系统:long是4字节,int是4字节

64位系统:long是8字节,int是4字节

@@局部变量中采用通用的命名方式,仅限于n、j、i等作为循环变量使用;

@@定义变量的同时一定要进行初始化;

1.4 sizeof

@@sizeof 并非是一个函数,是一个关键字

int k;

sizeof(int)  //括号必须

sizeof k;//括号非必须


1.5 if else

@@ bool 变量判断

使用if(bTag),if(!bTag)进行bool变量判断

@@float变量判断

float变量是带有精度的小数,因此要引入精度进行条件判断

if(fNum>=epsinon)...

@@指针非空判断

if(NULL==p)

@@attention:

if条件判断,先进行正常情况判断,再进行异常情况判断(正常情况发生的概率更大,避免无谓的低效判断)。

1.6 switch

@@case后的值的要求???

@@attention:、

case语句尽量简短,如果条件执行的太长,要单独写一个函数进行功能模块化。

@@continue ,break

continue终止“本轮”循环,break终止“本层”循环

eg. 

for(int i=0;i<n;i++)

for(int j=0;j<n;j++)\

continue; .//when j=8,so teminate, and transfer to j=9

break;// when i=1,j=8,so terminate ,and transfer to i=2;j=0;


1.7 do,while ,for

@@不能在循环中修改循环变量i,防止失控

1.8 void

@@凡是不加返回类型的函数,默认为int型

add(int a,int b)//return int

@@void 指针不能进行算术运算,也不能进行自加减

1.9 return

@@return 不能返回堆栈内的临时局部变量

function(void *pointer)

{

return;//return 返回的是什么?

}

1.10 const

@@const 关键字可理解为readonly变量,不是常量,其值在编译时不能使用,其在编译时编译器不知道其存储的内容。//其他变量在编译时会读取存储的内容么?

在.c文件中:

const int max=100;

int array[max];//报错,说明max仍为一个变量

@@const变量在编译期间不进行内存分配,只保存在符号列表中,因此,没有了内存读写的操作,可提高编译效率

@@const和definition的区别

const只进行一次内存分配,保存在静态存储区,而define在预编译阶段进行替换,有若干个内存中的拷贝。

1.11 volatile

@@volatile应用于避免编译器的默认优化而造成的数据实时性变更丢失。即保证每次都重新读取volatile变量的值,实时进行更新。

@@questions:

const volatile int i=0; //i 是什么类型

1.12 struct

@@空结构体大小为1字节

@@柔性数组(c99支持)

typedef struct st
{
     int i;
     int a[0];

}st1;
//st1 为柔性数组,sizeof(st1)=4,
//使用柔性数组时必须保证可变数组前定义
//一个其他成员,当使用变长数组时,要临
//时通过malloc函数为数组分配内存,分
//配内存后,sizeof(st1)=4,保持不变。 




猜你喜欢

转载自blog.csdn.net/huntershuai/article/details/25897817
今日推荐