您的位置:首页 > 其它

宏定义、构造数据类型、循环结构——苏嵌是实训第8天

2012-07-09 21:16 225 查看
一:宏

宏定义又称为宏代换、宏替换,简称“宏”。

1.宏定义的格式

宏定义的一般格式是:

#define 宏名 宏体

宏名通常用英文大写字母表示。列如:

#define YES 1

宏名如果出现在字符串中,编译预处理不会对它进行替换。例如程序段

char *ps
ps=x==YES; printf(%s\n,ps);
变量ps右边出现的YES不会被置换,输出结果为“x==YES”而不是“x==1”。
2. 宏定义的嵌套

嵌套的宏定义,就是用定义过的宏名去定义另一个宏名。例如:

#define WIDTH 80

#define LENGTH (WIDTH+40)

在第二个宏定义中,使用了前面定义过的宏名WIDTH。在编译预处理时,程序中所有的WIDTH都被80所替换,所有的LENGTH又被(80+40)替换。
3. 宏定义的功能

(1) 定义符号常量:可以提高程序的运行效率

(2) 定义函数

例如:
#define POWER(X) ((X)*(X))

如下是打印0~99的平方的程序
int i;
for (i=0;i<100;i++)
printf(%d ,POWER(i));

易错的一道程序:
#define SQUARE(n) ((n)*(n))
main()
{ int i=1;
while (i<=10)
printf(%d\n,SQUARE(i++));}
运行结果为(2,12,30,56,90)
经宏替换后,printf()函数语句被置换为:
printf(%d\n,(i++)*(i++));
4. 宏定义的解除

#undef 宏名

http://learn.akae.cn/media/ch21s02.html)

二:构造数据类型
2.1结构体
结构体类型的声明
struct 结构体名
{ 成员列表
};
(1)“struct”是C语言的关键字,是结构体类型的标志。
(2)结构体类型的大小是其所有成员所占空间字节数相加之和。(在linux下,由于存在内存空洞,所占字节数要满足字对齐或半对齐)求空间字节数的方法:如下,n=8.注。在linux下,int为4字节,char为1字节。

struct date

{

char a;

int b;

};

int main()

{

struct date k;

int n;

n=sizeof(k);

printf("%d\n",n);

}
(3)花括号外的分号必不可少。
struct date
{ int year,month,day;
}sund;
(4)结构体类型的声明还允许嵌套。如:
struct student
{
int num;
char name[20];
struct date birthday;
}stul;
(5)结构体变量的初始化,所有初值与各成员数据类型要匹配或兼容。
如:struct student stul={1306,“zhouyang”,1989,12,14};

(6)结构体变量的使用:结构体变量名.成员名(实心点是成员运算符,如:sund.year sund.month)。
(7)结构体变量作为函数参数传递的是所有成员的数据。
(8)结构体指针。使用如下:
struct worker
{ int num;
char name[20];
}wk,*pw;
引用结构体元素中的成员:(*pw).num,或pw->num。即是wk.nume。
共同体类型
和结构体有很多相似之处,其主要特点是,共同体变量中的所有成员占用同一段存储空间,这段空间的大小就是所有成员中字节数最大的值。在linux下,要满足字对齐或半对齐。(内存空洞的产生)

枚举类型(enum)
枚举类型就是一一列举出来变量的值,然后此变量就只能使用列举出来的值。
枚举类型定义的一般形式为:enum 枚举名 {枚举值表};
例如:
enum weekday
{ sun,mou,tue,wed,thu,fri,sat };
定义枚举类型变量:enum weekday a,b,c;或
enum weekday
{ sun,mon,tue,wed,thu,fri,sat } a,b,c;
注意点:(1)枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值。“sun=1; mon=2;”是错误的。
(2)枚举元素本身有系统定义了一个表示序号的数值,从0开始顺序定义为0、1、2、3.....。如sun=0,mon=1.
typedef自定义类型

基本格式:typedef 基本数据类型符 用户自定义数据类型符 (相当于替换)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: