c语言拾零㈡

                                                      
******其实这些东东很平凡,可是自己总结后还是让自己有得到东东的感觉,不知道你是不是?*********
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是一个指针变量,它指向一个指向整型数据的指针变量 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值