黑马程序员——C语言小结------宏定义以及基本数据类型总结

时间:2021-04-13 00:22:30

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

一、预处理

  1.所有的预处理指令都是以#开头

  2.预处理指令分3种

    1> 宏定义

    2> 条件编译

    3> 文件包含

  3.预处理指令在代码翻译成0和1之前执行

  4.预处理的位置是随便写的

  5.预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用

  6.宏名一般用大写或者以k开头,变量名一般用小写

二、1.带参数的宏定义效率比函数高,例如:

#define sum(v1, v2) ((v1)+(v2))
#define pingfang(a) ((a)*(a))

三、只要写了#if,在最后面必须加上#endif

  例1:

#ifndef A
#ifdef A
#if !defined(A)
    printf("哈哈\n");
#endif

  例2:

#if (A == 10)
    printf("a是10\n");
#elif (A == 5)
    printf("a是5\n");
#else
    printf("a其他值\n");
#endif

四、typedef使用

  1.作用:给已经存在的类型起一个新的名称

  2.使用场合:

    1> 基本数据类型   typedef int MyInt;

    2> 指针    typedef char * String;

    3> 结构体

typedef struct
{
    int age;
} MyStu;

    4> 枚举

typedef enum {
    Man,
    Woman
} MySex;

    5> 指向函数的指针   typedef int (*MyPoint)(int, int);

五、#define 与 typedef 的区别:

#define String2 char *
typedef char * String;
    //s1、s2是char *指针
    String s1, s2;
    /*
     String s1;
     String s2;
     */

    s1 = "jack";
    s2 = "rose";

    // s3才是char *指针,s4只是char
    String2 s3, s4;
    /*
    char *s3, s4;
    char *s3;
    char s4;
    */
    

六、include

  1.<>表示系统自带的文件,""表示自定义的文件

   2.不允许循环包含,比如a.h包含b.h,b.h又包含a.h

七、static 和 extern 对函数的作用

  外部函数:定义的函数能被本文件和其他文件访问

     1> 默认情况下所有函数都是外部函数

     2> 不允许有同名的外部函数

   内部函数:定义的函数只能被本文件访问,其他文件不能访问

     1> 允许不同文件中有同名的内部函数

 

   static对函数的作用:

      1> 定义一个内部函数

      2> 声明一个内部函数 

  extern对函数的作用:

    1> 完整地定义一个外部函数

    2> 完整地声明一个外部函数

   (extern可以省略,默认情况下声明和定义的函数都是外部函数)

八、static 和 extern 对变量的作用

  全局变量分2种:

  外部变量:定义的变量能被本文件和其他文件访问

    1> 默认情况下,所有的全局变量都是外部变量

    2> 不同文件中的同名外部变量,都代表着同一个变量

   内部变量:定义的变量只能被本文件访问,不能被其他文件访问

    1> 不同文件中的同名内部变量,互不影响

 

   static对变量的作用:

    定义一个内部变量

  extern对变量的作用:

    声明一个外部变量

 

  static对函数的作用:

    定义和声明一个内部函数

  extern对函数的作用:

    定义和声明一个外部函数(可以省略)

 

  static修饰局部变量的使用场合:

    1.如果某个函数的调用频率特别高

    2.这个函数内部的某个变量值是固定不变的

     static修饰局部变量:

       1> 延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁

       2> 并没有改变局部变量的作用域

       3> 所有的test函数都共享着一个变量b

九、递归的2个条件:

  1.函数自己调用自己

  2.必须有个明确的返回值

 

数据类型总结

一、基本数据类型

  1.int

    1> long int、long:8个字节  %ld

    2> short int、short:2个字节 %d %i

    3> unsigned int、unsigned:4个字节 %zd

    4> signed int、signed、int:4个字节 %d %i

  2.float\double

    1> float :4个字节 %f

    2> double:8个字节 %f

  3.char

    1> 1个字节 %c %d

    2> char类型保存在内存中的是它的ASCII值

       'A' --> 65

二、构造类型

  1.数组

    1> 只能由同一种类型的数据组成

    2> 定义:数据类型 数组名[元素个数]; 

  2.结构体

    1> 可以由不同类型的数据组成

    2> 先定义类型,再利用类型定义变量 

三、指针类型

  1.变量的定义

int *p;

  2.间接操作变量的值

int a = 10;
p = &a;
*p = 20; 

四、枚举类型

  使用场合:当一个变量只允许有几个固定取值时

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------