【这就是C】
文章平均质量分 66
yzc_1991
这个作者很懒,什么都没留下…
展开
-
结构体中的成员到底如何存储?
结构的存储分配编译器按照成员的顺序一个接一个地给每个成员分配内存,但是由于要考虑到正确的边界对齐要求,成员之间会出现用于填充的额外内存空间(内存对齐)。为什么有边界对齐?当内存中的值合理对齐时,很多机器能非常高效地访问,而且,有些机器根本就不能访问没有对齐的地址。结构的内存对齐主要有一下几个原则:1)结构体变量的首地址是其最长基本类型成员的整数倍;备注:编译器在给结原创 2013-09-04 00:03:32 · 3460 阅读 · 2 评论 -
标识符的命名规则(此规则强于ISO/ANSI C的规定)
标识符的命名规则(此规则强于ISO/ANSI C的规定) 1、不要使用任何以下划线开头的名称; 2、不要使用任何匹配标准宏的名称; 3、不要使用任何标准库中已经使用过或者留作“未来使用”的函数和全局变量名称。 4、不要重定义标准库的类型定义和标签名称。 未来使用的名称模式 is[a-z]* to[a-z]* functionE[0-9]* E[A-原创 2013-08-31 14:47:57 · 2263 阅读 · 0 评论 -
如何选择正确的整数类型
整数类型的选择 1、没有特别的要求的话,按照时间和空间来权衡,够用即可。 2、除非确实需要存储字符类型,不然,不要使用char来存储小整数,因为编译器会产生额外的代码来进行int型和char型的转换。 3、C语言没有精确的类型大小的定义,C标准只是给出了如下规定: 长整型至少应该和整型一样,而整型至少应该和短整型一样。 char类型至少8位 short和int类型至少1原创 2013-08-31 14:54:09 · 1282 阅读 · 0 评论 -
Reverse Polish Calculator (逆波兰计算器)方案的分析——如何解决问题,从需要到实现
Reverse Polish Calculator (逆波兰计算器)方案的分析——如何解决问题,从需要到实现原创 2013-09-04 23:28:35 · 2111 阅读 · 0 评论 -
你看糊涂了吗?解析C中复杂的声明
复杂的声明考虑下面的一个声明:char *(*(*a[])())();使用由内到外的阅读方法,并遵循[]和()的结合性强于*的规则,依然很难得到这个声明的准确描述和含义。我们使用另一种方法,“声明模仿使用”:*(*(*a[])())() 是一个 char(*(*a[])())() 是一个 指向char*(*a[])() 是原创 2013-08-31 14:49:24 · 819 阅读 · 0 评论 -
“大嘴贪心”——词法分析
词法分析中的“贪心法” 符号(token):程序中的一个基本组成单元,其作用相当于一个句子中的单词。(符号就是程序中的一个基本信息单元。) 词法分析器:编译器中负责将程序分解为一个一个符号的部分。 C语言中,符号之间的空白字符会被忽略,但是符号中间不能有空白。 C语言中的有些符号比如:+、-、=等只有一个字符长,称为单字符符号;有些符号包含多个字符比如:==、->等,称为多字符符号原创 2013-08-31 14:51:34 · 1731 阅读 · 0 评论 -
常量和常量表达式
常量和常量表达式 long型常量以L或者l结尾,有时候,如果一个整数太大无法用int表达,也被当做long型; 无符号常量以U或者u结尾,unsigned long型常量以UL或者ul结尾; 没有后缀的浮点数常量为double型; 有后缀F或者f的浮点数常量是float型,后缀L或者l表示long double型常量; 八进制和十六进制的常量也可以使用L和U后缀;原创 2013-08-31 14:56:25 · 3662 阅读 · 0 评论 -
这些声明的知识,你知道吗?
声明 如果变量不是自动变量,则只能进行一次初始化操作,应该在程序开始之前进行,并且初始化表达式必须为常量表达式,并且不能使用函数进行初始化; 自动变量的初始化可以是任意表达式; 默认情况下,外部变量和静态变量将被初始化为0; 任何变量的声明都可以使用const限定符限定,表明该变量为只读变量,如果试图修改由const限定的值,其结果取决于具体的实现; con原创 2013-08-31 14:57:07 · 894 阅读 · 0 评论 -
高效“神奇”的位操作符
位操作符& |^ ~ >只能用于整数,其中和>>操作符是双目操作符,它们的右操作数必须为非负整数;左移运算,空位都用0填充;右移运算,unsigned类型空位用填充,signed类型空位有的用0填充,有的用符号位填充,取决于具体实现;功能 示例原创 2013-08-31 15:07:17 · 1143 阅读 · 0 评论 -
负数的除法和取模运算规则
负数的除法和取模运算规则 1/* 2 *测试负数除法和取模运算 3 */ 4#include 5 6intmain(void) 7{ 8 printf("-5 / 2 = %d\t", -5/原创 2013-09-03 23:51:10 · 3846 阅读 · 0 评论 -
如此转换
类型转换 当一个运算符的几个操作数类型不同时,就需要进行类型转换; 一般来说,自动转换会把“比较窄的”操作数转换为“比较宽”的操作数,并且不会丢失信息; 不允许进行无意义的转换,比如将float型数作为数组下标值; 针对可能丢失信息的转换,编译器会给出警告; C语言并没有指定char类型的变量是无符号的还是有符号的,当把一个char类型值转换为int类型值时,其结果可能为正,可原创 2013-08-31 14:57:51 · 936 阅读 · 0 评论