******其实这些东东很平凡,可是自己总结后还是让自己有得到东东的感觉,不知道你是不是?*********
1,宏定义
它的作用是指定标识符来代替字符串,在编译预处理时,对程序中‘所有’出现的“宏名”,都用宏定义中
的字符串去代换,这称为“宏代换”或“宏展开”。宏展开时,又以该字符串取代宏名,这只是一种简单的代
换,是一种直接的代换。需要注意的是,宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结
束。如要终止其作用域可使用# undef命令。例:#define DEMO 142857
max()
{....
}
#undef DEMO /*结束宏定义的作用域*/
main()
{....
}
宏定义可以嵌套在宏定义的字符串中可以使用已经定义的宏名,在展开时由预处理程序层层代换,但
是宏名若用括号扩起来的话,预处理不对其进行展开;通常情况下,宏名用大写字母,以便和变量区别,
也可以对数据结构和输出格式做宏定义,重复输入时可以减少麻烦。例:
#define PA 2
#define PB PA*3 /*宏定义的嵌套*/
#define I int /*对数据结构做宏定义*/
#define PR printf
main()
{ I a=PB; /*等价于:int a=6;*/
PR("PB是%d",a); /*等价于:printf(); 输出结果为:PB是6 而不是:6是6*/
}
带参宏定义:宏名与形参表不要由空格,形式参数不分配内存单元,因此不必作类型定义。而宏调用中
的实参有具体的值,要用它们去代换形参,因此必须作类型说明,这是与函数中的情况不同的。注意宏定义
与函数调用的本质区别。 例:
#define MAX(a,b) (a>b)?a:b /*MAX与(a,b)不要有空格,否则是无参宏定义*/
#define SQ(z) (z)*(z) /*注意括号的应用*/
main()
{ int x,y,z,max;
printf("input two numbers: ");
scanf("%d%d",&x,&y);
z=SQ(x+1); /*宏定义字符串如没有扩号,则z=x+1*x+1,可见直接代换与函数调用的区别*/
max=MAX(x,y); /*只是将x,y直接替换a,b;max=(a>b)?a:b,与函数调用不一样,没有分配内存*/
printf("max=%d/nz=%d",max,z);
}
宏定义也可用来定义多个语句,在宏调用时,把这些语句又代换到源程序内。
demo: #define DEMO(s1,s2,s3,v) s1=l*w;s2=l*h;s3=w*h;v=w*l*h;
main()
{ int l=3,w=4,h=5,sa,sb,sc,vv;
DEMO(sa,sb,sc,vv);
printf("sa=%d/nsb=%d/nsc=%d/nvv=%d/n",sa,sb,sc,vv);
}
2,文件包含#include
包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来,但是两者还是有区别的,使用尖括号
表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;使用双引
号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所
在的目录来选择某一种命令形式。另外,文件包含命令允许嵌套。
3,指针
取地址运算符&是单目运算符,其结合性为右结合;取内容运算符*是单目运算符,其结合性为右结合。指
向数组的指针变量,可以加上或减去一个整数n。只有指向同一数组的两个指针变量之间才能进行运算,否则
运算毫无意义。但是两个同一数组的指针的相加也是没有意义的,而两指针变量相减所得之差是两个指针所指
数组元素之间相差的元素个数。另外指针变量与0比较也是有意义的,指针变量未赋值时,可以是任意值,是
不能使用的。否则将造成意外错误。而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。
字符串指针变量和字符变量的指针变量 例: char c,*p=&c; 字符变量的指针变量
char *s="C Language" 字符串指针变量
指针的内容太多了,我大致的看了一下,我们都知道它是c语言中比较重要的部分,所以由于本人的技术限
制原因现在没有可总结的东东出来,抱歉,只一个定义表帖上。
定义 含 义
int i; 定义整型变量i
int *p p为指向整型数据的指针变量
int a[n]; 定义整型数组a,它有n个元素
int *p[n]; 定义指针数组p,它由n个指向整型数据的指针元素组成
int (*p)[n]; p为指向含n个元素的一维数组的指针变量
int f(); f为带回整型函数值的函数
int *p(); p为带回一个指针的函数,该指针指向整型数据
int (*p)(); p为指向函数的指针,该函数返回一个整型值
int **p; P是一个指针变量,它指向一个指向整型数据的指针变量