C语言之深度剖析Study

 

Chapter1

1定义与声明:定义是编译器创建一个对象,为这个对象分配一块内存并给它取名字。声明没有分配内存。

2 register:尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率,但register不能用地址运算符&

3 Static作用: 1修饰变量 全局和局部

                          2 修饰函数成为内部函数

4关键字 sizeof

5 const:编译器通常不会为普通const只读变量分配存储空间,而是将他们保存在符号表中,这使得他成为一个编译期间的值,没有了存储与读内存的操作,使得它效率很高。

#define宏在预编译阶段进行替换,而const修饰的只读变量在编译的时候确定其值。#define宏没有类型,而const修饰的只读变量具有特定的类型。

6volatile:易变,不稳定。这种变量是随时可能发生变化的。每次使用它的时候必须从内存中取出i的值,即保证对特殊地址的稳定访问。

7 struct最后1byte长即使是空的也一样

   柔性数组 flexible array)结构中的最后一个元素允许是未知大小的数组,叫做柔性数组成员。

  Struct默认属性是public

8Big endian :字数据的高字节存储在低地址,低字节存储在高地址。

  Little endian:字数据的低字节存储在高地址,低字节存储在低地址

怎样checkBig endian还是little endian

Int checkSystem()

{

   Union check

{

   Int I;

  Char ch;

}c;

 c.i=1;

return(c.ch == )

 

}

9 enumdefine区别

   1 #define宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值

   2在一般编译器里,可以调试枚举常量,不可以调试#define

   3 枚举可以一次定义大量相关的常量,而#define宏一次只能定义一个

Chapter3 Preprocessing

10 #define  #undef   #include

 #if  #else#elif #ifdef   #ifndef

#line 改变当前行数和文件名称

 #error  遇到#error就会生成一个编译错误提示消息,并停止编译

#pragma   为实现时定义的命令,允许向编译程序传送各种指令例如,编译程序可能有一种选择,支持对程序执行的跟踪,可用#pragma语句指定一个跟踪选择。

 

Define比,const修饰的数据是有类型的,#define宏定义的数据没有类型。编译器为const修饰的制度变量作类型校验。但是const修饰的不是常量而是readonly的变量,const修饰的只读变量不能用来作为定义数组的维数,也不能放在case关键字后面。

#undef 撤掉宏定义

条件编译 #ifdef #ifndef

#pragma  设定编译器的状态或者是指示编译器完成一些特定的动作。

#pragma message 在编译信息输出窗口输出相应的信息

#pragma pack 内存对齐

   #pragma pack(n) 编译器将按照n个字节对齐

   #pragma pack() 编译器将取消自定义字节对齐

 

第五章 内存管理

内存三个区:静态区,堆,栈

静态区:自动全局变量和static变量,在整个程序的生命周期都存在

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

堆:由malloc/new分配,free/delete决定

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值