标签:包括 变量 相关 存储类型 三层 c++ type stat 自己
C语言作为一门古老的语言,其灵活性和容易出错都让人 又爱又恨,书籍《你必须知道的495个C语言问题》,使用问答的形式,告诉读者 C语言使用的各个方面的知识,包括一些冷知识等。以下,我要摘录和整理些 ,我认为比较重要的知识进行分享。
1.关于int与long,众所周知,C语言标准没有规定标准类型的大小,特别是对于int类型,在甚多16位的机器上看,int类型其实是16位的,而到了32位机器上,int就是32位的了,实际上,int类型代表了机器的自然字长,这是多整形变量的当然之选,在标准头文件中已经定义了标准类型名称int16_t和int32_t,分别表示这两种字长。而long则一直是 32位的,long long 则是64位。但是,到了64位机器时代,long型已经变成了64位了,而int本身还是保持着32位的字长。
2.区别声明 和 定义 ,declaration or definetion
书中 给的 解释 如下:首先,尽管一个全局变量或函数可以(在多个编译单元中)多次“声明”,但是“定义”却最多只能出现一次,对于全局变量,定义是真正分配空间并赋初值(如果有)的声明,对于函数,定义是提供函数体的“声明”。
当希望在多个源文件中共享变量或者函数时 ,需要确保定义和声明的一致性,最好的安排是在某个相关的.c文件中定义,然后在.h中进行外部声明。在需要使用的时候,只要包含对应的头文件即可。
将全局变量定义在.h中是一个好主意
3.存储类型
static:神奇一 、书面解释是静态、不发展、改变的意思,这个关键词我用了很长时间才搞清楚到底是什么意思,很多的笔试答案就很高端了,死记硬背的答案,其实是很可悲的。其,我们可以从存储位置 和使用位置进行说明 :
const
神奇二、记住 不是常量 的意思,可以理解为 只读,可以参看volatile与const综合分析
4.复杂声明
这是C让人痛不欲生的源泉。
比如 声明 char *(*(*a[N])())();
这到底是什么鬼?
下面 请遵守 "从内到外"的 理解方式来 理解下:
记住:[] 和() 比* 优先级高
那么再看我们常用的 函数指针 类型,就很简单了;比如:
char *( *pf )(double* dd,int n);
可见,一个声明的 最终类型 由第一层的 类型指定的。现在 你要是还分不清楚 函数指针 和指针函数就说不过去了。
那么,我们会解析一个复杂声明了,我们怎么自己声明呢?
这里 ,我推荐使用 typedef
还是最上面的例子,我们怎么样使用typedef 来做声明呢?
typedefchar* pc;//声明一个指向char* 的指针 typedef pc fpc();//声明一个返回值为char* 的函数 typedef fpc *pfpc;//声明一个返回值为该函数 的 指针 typedef pfpc fpfpc();// 声明一个 返回值为 以上指针的函数 typedef fpfpc *pfpfpc;// 声明一个 以上类型的函数指针 pfpfpc a[N];//声明一个数组,该数组的类型为以上函数指针
在实际编码中 ,自然不可能有如此多层的声明,一般的,我们都是声明的两层,还是函数指针的例子,我们可以这样声明:
typedefchar*(*pf)(double*dd,int n); pf repf;
5.初始化
实际的编码中,忘记初始化,或者初始化错误造成的问题还是很严重的。
建议,所有的区域的变量都进行人工显式的初始化,别偷懒哈。
标签:包括 变量 相关 存储类型 三层 c++ type stat 自己
原文地址:http://www.cnblogs.com/Stultz-Lee/p/6752035.html