C语言(十一)

C语言的关键字

===================

    static    const    typedef   extern    define  。。。。。。。

          多个.c文件一起编译:   gcc   main.c   bluetooth.c  wifi.c   -o   main

                                                偷懒写法:   gcc   *.c   -o   main  //把所有的.c文件一起编译

         动态内存分配:指的是malloc   calloc   realloc分配的内存

          (1)static和extern配合

                 第一种:  修饰变量

                                    修饰全局变量:(使用频率最高)

                                              正常情况下(没有用static修饰)全局变量可以在定义它的文件中使用,也能在其它文件中使用(extern声明一下即可)

                                              static修饰了全局变量,相当于限制了全局变量的作用范围(该全局变量只能用于定义的那个文件,其它文件不能使用,哪怕extern声明也不行)

                                    修饰局部变量:(实际开发往往用来修饰统计变量)

                                              表示这个局部变量只能被初始化一次

                第二种:修饰函数

                                            正常情况下(没有用static修饰)函数可以在定义它的文件中使用,也能在其它文件中使用(extern声明一下即可)

                                            static修饰了函数,相当于限制了函数的作用范围(该函数只能用于定义的那个文件,其它文件不能使用,哪怕extern声明也不行)

          (2)extern

                第一种:声明外部的全局变量

                第二种:声明外部的函数     

          (3)const

                第一种:修饰常量(常量是只读,不能修改)

                                  const  int  a=9;  //定义了一个常量a

                第二种:修饰指针   

                                  int  a=99;

                                 写法一  const int  *p=&a;      //写法一和写法二是等价,表示这个指针不能修改它指向的地址中的内容(实际开发中,防止指针修改你地址中的内容)      

                                 写法二  int const  *p=&a;   

                                               size_t strlen(const char *s);

                                                          strlen(buf)

                                 写法三  int *const p=&a; //p可以访问a的值,也能修改a的值,但是不能指向其它变量的地址(你可以认为p跟a的地址捆绑在一起了)

         (4)typedef  类型重定义

                 作用:给C语言原本的数据类型改个名字(增强可读性,便于移植程序)

                         size_t --》类型没有见过  typedef  unsigned  long  size_t;

                    写法一:给基本数据类型换名字

                                          typedef  int   zhengshu;

                    写法二:给指针换名字

                                          公式: typedef  指针原本的定义;  

                                          typedef  char *pp;   //给char *换个名字叫做pp, pp不是变量名,是类型名

                                          typedef  char (*p)[10];  //给char (*)[10]数组指针换了名字,叫做p   p不是变量名,是类型名        

                    写法三:给数组换名字

                                         公式: typedef  数组原本的定义;

                                          typedef  char  buf[10];  //buf不是数组名,是类型名  char [10]类型

                     可移植数据类型:见图示

 

 

C语言主函数传参

=================

     C语言主函数的写法:

          void  main()

          int   main()

          int   main(int argc,char **argv)  //  ./a.out   hello    hehe

           int   main(int argc,char *argv[])

                        argc --》参数个数

                        argv[0] --》第一个参数

                        argv[1] --》第二个参数

           注意:主函数传参,传递的参数默认当成字符串处理

      

作业:

          1.  typedef给一个函数指针换名字,  使用更换的类型名定义一个函数指针

                                       int  add(int a,int b);  --》函数指针类型    int (*p)(int,int);

                                       typedef  int (*p)(int,int);  //p不是指针变量,  是一种数据类型

                                       p  q=add;     //p是数据类型    q指针变量                   

          2.  封装一个函数,判断字符串A是不是字符串B的子串,如果是返回A在B中首次出现的位置(返回指针)

                                  char  *getstr(char *A,char *B)

                                  {

 

                                                                                  

                                  }

       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值