宏定义、构造数据类型、循环结构——苏嵌是实训第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 基本数据类型符 用户自定义数据类型符 (相当于替换)
宏定义又称为宏代换、宏替换,简称“宏”。
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 基本数据类型符 用户自定义数据类型符 (相当于替换)
相关文章推荐
- 数据类型与循环结构
- 第七章、更高级的索引结构(XML索引、用户定义数据类型、层次数据、空间数据、文件流、表压缩)
- objective-c(四)-基本数据类型以及循环和选择结构
- oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数
- 数据结构1.预定义类型和变量
- ptyhon数据类型及循环结构
- objective-c(四)-基本数据类型以及循环和选择结构
- java 基础数据类型与循环结构要点
- 线性表数据结构类型定义及相关操作总结
- js基础--变量、数据类型、循环、判断、函数定义
- oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数
- 数据网格结构构造及其定义
- Objective-C学习笔记(四)-数据类型和循环结构
- java 数据类型 三种循环 以及标识符 和逻辑运算符的定义(20150503)
- orcle基础语法--------(定义数据类型,循环)
- 数据结构之队列11循环队列定义及实现
- C语言数据基本类型——20120705苏嵌实训第四天
- Java基础语法(一)---数据、数值类型、运算符、程序流程控制语句和循环结构
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
- OC第二节课 类、对象方法,数据类型和表达式,循环结构,选择结构