1.2 C语言的早期体验

1)C语言的基本数据类型直接与底层硬件相对应。C语言不存在内置的复数类型。C语言一开始不支持浮点类型,直到硬件系统能够直接支持浮点数之后才增加了对它的支持。

2)auto关键字显然是摆设。这个关键字只对创建符号表入口的编译器设计者有意义。它的意思是“在进入程序块时自动进行内存分配”,其他程序员不必操心auto这个关键字,它是缺省的变量内存分配模式。

3)表达式中的数组名可以看作是指针。

4)float被自动扩展为double。尽管ANSI C中情况不再如此,但最初浮点数常量的精度都是double型的,所有表达式中float变量总被自动转换成double。

5)不允许嵌套函数(函数内部包括另一函数的定义)。

6)register关键字。这个关键字能给编译器设计着提供线索,就是程序中的哪些变量属于热门(经常被使用),这样就可以把它们存放到寄存器中。但使用register关键字,虽然简化了编译器,却把包袱丢给了程序员。

1.3 C预处理器

它实现了三个主要功能:

1)字符串替换:#define MAX_LENGHT 1000

2)头文件包含:一般性的声明可以被分离到头文件中,并且可以被许多源文件使用。

3)通用代码模板的扩展:#define max(x, y)      x>y?x:y

在宏的扩展中,空格会对扩展的结果造成很大的影响。对宏的使用,要适量使用。

1.9 ANSI C标准

1)实参char* s与形参const char* p应该是相容的,标准库中所有的字符串处理函数都是这样子的。那么,为什么实参char **argv与形参const char **p不能相容?

赋值是否合法,必须满足下列条件之一:

a. 两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针指向的类型必须具有右边指针所指向类型的全部限定符!

情况1:

char *p = "akakka";

const char *ch;

ch = p;  //ok, char 和 char 是相容的类型,ch具有p的限定符(无)

情况2:

const float *f;   //f是一个指针,f指向const float。

const char **ch;

char **ca;

由于char **和const char **都是没有限定符的指针类型,但是它们指向的类型不一样,前者指向char*,而后者指向const char*,因此它们是不相容的。

最新文章

  1. 由overflow-x:scroll产生的收获
  2. 基于Ruby的watir-webdriver自动化测试方案与实施(四)
  3. 【CSharp】C#开发ActiveX插件
  4. C# delegate & event
  5. button 浏览器兼容问题
  6. dojo新建widget步骤----主要针对widget路径
  7. C#开源框架(整理)
  8. PIL在windwos系统下Image.show无法显示图片问题的解决方法
  9. 只为粗暴看一下ES6的字符串模板的性能
  10. 使用windows桌面ftp上传文件到linux服务器
  11. xml注释快捷键
  12. 第一个ServiceStack服务框架
  13. Google的java工具类Guava
  14. LSTM Networks
  15. IIS添加Expires头
  16. 三、html样式、链接、表格
  17. Django:admin后台汉化问题
  18. 一劳永逸的搞定 FLEX 布局(转)
  19. html零碎总结
  20. makedown 软件

热门文章

  1. PHP json的插入和解析在数据库中的操作
  2. bootstrap弹出框居中
  3. 说一说&&符
  4. 织梦DedeCms用SQL语句调用数据库任意内容
  5. 【行为型】Memento模式
  6. 委托异步调用时BeginInvoke的陷阱处理
  7. sqlserver 进行MD5加密
  8. Spring ApplicationContext的国际化支持
  9. JSP EL表达式的运用
  10. Web分析日志分析2