宏定义,条件编译,共用体,位运算,位域

宏定义

#define

#undef

定义有参数的宏时,应该注意:

~宏名与形参表的圆括号之间不能有空格

~宏定义中,字符串形式的参数最好用括号阔起来

带参数宏与函数比较

~有参数宏的形式参数不是变量,不分配内存空间,无需说明数据类型。而函数的形参是变量,要分配空间,在函数定义时必须说明类型。

~预处理程序认为有参数宏的实参是字符串,并用它取替换形参。

#define MUL(x,y) x*y

int a = 5,b = 10,c;

c = MUL(a+1,b+1);

c = a+1*b+1;

此程序中,用啊a+1去替换x。而在函数中,是先计算a+1,再把此值传给x。

~宏定义不会占用运行时间,只是编译时间较长。函数调用则会占用较多运行时间。



条件编译

~#ifndef 标识符  (换成#ifdef表示如果定义)(将标识符换成表达式同理)

       程序段1

       #endif    如果没有定义标识符,就编译程序段1


~#ifndef 标识符   (换成#ifdef表示如果定义)(将标识符换成表达式同理)

     程序段1

   #else

     程序段2

    #endif   如果没有定义标识符,就编译程序段1,否则编译程序段2


结构体和指针

  p->number++  得到p所指的结构体变量中的成员number的值,使用该值后再+1。

  ++p->number 得到p所指的结构体变量中的成员number的值,先+1后再使用。


共用体

union 共用体名

{

    成员列表

}变量列表;

若进行以下赋值:a.i = 100;   (a为共用体变量,i,c都是成员)

                             a.c = 'a';

  此时共用体变量 a 中 i 已经没有值了,因为其存储空间用来存储 c 了。 同一块内存可以存放几种不同类型的数据。但在某一时刻只能存放其中一个值。

共用体所占内存长度取决于其成员的最大长度。

不能把共用体发的变量作为函数参数,函数也不能返回共用体变量。但阔以使用共用体变量的指针。

共用体类型的变量可以出现在结构体的声明中,也可以作为数组元素的类型,反之亦然。

 

使用typedef声明新类型名来替代已有的类型名

例: tydef int INT  声明后int 和INT等价  

使用tydef 只为某种类型声明一个别名,并不是定义变量,也不会分配存储空间。


位运算

位运算符 &, |,^ (位异), ~(取反),<< , >>.

左移运算符<<将这个数的各个二进制位向左移动若干位。  左移n位相当于该数乘2^n。

同理右移时,右移n位相当于该数除以2^n.

右移时,当最高位0时,则补0;最高位为1时,有的系统移入0,有的移入1. 移入0的为逻辑右移。移入1 的为算数右移。

位域

C语言允许在一个结构体中以位为单位来使用内存。这种以位为单位的成员成为位域或位段。

若某一位段要从另一存储单元开始存放,结构体可定义为如下形式:(这里一个存储单元单元是4个字节)

      int a: 6;       0~5的6位存放成员a

      int b:4;         6~9的4位存放成员b

      int :0;         10~31位空闲

      int c:4;     c从下一字节开始存储,占取32~35

     int  :8;          36~43强制空闲

      int d:     从下一字节开始存储,占一个字节

使用这种方式可以使某些位强制空闲不予使用。



     






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值