typedef , static和 extern

typedef

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

2.使用场合:

1> 基本数据类型

2> 指针

3> 结构体

4> 枚举

5> 指向函数的指针

#include <stdio.h>

typedef int MyInt;
typedef MyInt MyInt2;

// 给指针类型char *起一个新的类型名称String
typedef char * String;

/*
struct Student
{
    int age;
};
typedef struct Student MyStu;
*/

/*
typedef  struct Student
{
    int age;
} MyStu;
*/

typedef struct
{
    int age;
} MyStu;

/*枚举型
enum Sex {Man, Woman};
typedef enum Sex MySex;
*/

typedef enum {
    Man,
    Woman
} MySex;

typedef int (*MyPoint)(int, int);

int minus(int a, int b)
{
    return a - b;
}

int sum(int a, int b)
{
    return a + b;
}
/*
struct Person
{
    int age;
};

typedef struct Person * PersonPoint;
*/

typedef struct Person
{
    int age;
} * PersonPoint;

int main()
{
    // 定义结构体变量
    struct Person p = {20};

    PersonPoint p2 = &p;

    //struct Person *p2 = &p;

    //MyPoint p = sum;
    //MyPoint p2 = minus;
    //int (*p)(int, int) = sum;

    //int (*p2)(int, int) = minus;

    //p(10, 11);

    //MySex s = Man;
    //enum Sex s = Man;
    //enum Sex s2 = Woman;

   // struct Student stu3;
    //MyStu stu = {20};
    //MyStu stu2= {21};

    return 0;
}

void test2()
{
    String name = "jack";

    printf("%s\n", name);
}

void test()
{
    int a;
    MyInt i = 10;
    MyInt2 c = 20;

    MyInt b1, b2;

    printf("c is %d\n", c);
}

static

1.作用:

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

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

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

void test()
{
    static double pi = 3.14;

    double zc = 2 * pi * 10;

    int a = 0;
    a++;
    printf("a的值是%d\n", a); // 1

    /*
     static修饰局部变量:
     1> 延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁
     2> 并没有改变局部变量的作用域
     3> 所有的test函数都共享着一个变量b
     */
    static int b = 0;
    b++;
    printf("b的值是%d\n", b); // 3
}

int main()
{
    for (int i = 0; i<100; i++) {
        test();
    }

    test();

    test();

    test();

    return 0;
}

全局变量分2种:

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

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

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

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

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

static对变量的作用:

定义一个内部变量

extern对变量的作用:

声明一个外部变量

static对函数的作用:

定义和声明一个内部函数

extern对函数的作用:

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

时间: 2024-10-16 15:25:53

typedef , static和 extern的相关文章

c语言预处理指令、typedef、static和extern相关介绍

一:typedef 作用:可以给一个已经存在的数据类型取一个别名 格式:typedef 原数据类型  新类型   例如:typedef   int  INT; 预处理指令#define 也可以给数据类型取别用用法:  #define  INT  int; //1.用在基本数据类型上 int a = 10; typedef int TNT; typedef char CHAR; CHAR c='A'; //65 TNT b = 100; //2.给数组起别名 char ch[5]; typedef

黑 马 程 序 员_视频学习总结&lt;C语言&gt;----07 static和extern关键字、typedef

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.外部函数 外部函数:如果在当前文件中定义的函数允许其他文件访问.调用,就称为外部函数.C语言规定,不允许有同名的外部函数 二.内部函数 内部函数:如果在当前文件中定义的函数不允许其他文件访问.调用,只能在内部使用,就称为内部函数.C语言规定不同的源文件可以有同名的内部函数,并且互不干扰. 三.static.extern与函数的总结 1.在定

黑马程序员————C语言(预处理指令、static与extern、typedef)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲  预处理指令 预处理指令的概述 C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释,比如之前使用的#include文件包含指令,产生一个新的源程序,这个过程称为编译预处理,之后再进行通常的编译 为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾.习惯上我们尽

c/c++中static和extern使用

c/c++中static和extern使用 在C/C++中static和extern都能够用来修饰函数和变量,可是是有差别的. 内部函数和内部变量:仅仅能在文件内使用的函数和变量. 外部函数和外部变量:可以被其他文件使用的函数和变量. static 1 对函数 定义一个内部函数 static void test() { } 声明一个内部函数 static void test(); 2 对全局变量 定义一个内部变量 static int a; 3 对局部变量 定义一个生命周期较长的局部变量. vo

19-C语言static和extern关键字2-对变量的作用

一.在Java中,全局变量的定义没有严格的位置规定 全局变量可以定义在类的最前面,也可以定义在类的最尾端,也就说一个方法可以访问在它之后定义的变量. 可以看到,第4行定义的test方法可以访问第8行定义的变量a,这是完全没有问题的. 二.在C语言中,全局变量定义的位置是有限制的 默认情况下,一个函数不可以访问在它后面定义的全局变量 在第4行定义的main函数中尝试访问第9行定义的变量a,编译器直接报错了. 解决这个错误的话,有2种办法: 第1种办法:将变量a定义在main函数的前面 这样做编译器

16-static和extern关键字2-对变量的作用

上一讲介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问:extern用来定义和声明一个外部函数,允许其他文件访问.static和extern对变量也有作用,不过跟函数有点差别. C语言和Java都有全局变量的概念,但是它们的用法还是有些差别的. 一.在Java中,全局变量的定义没有严格的位置规定 全局变量可以定义在类的最前面,也可以定义在类的最尾端,也就说一个方法可以访问在它之后定义的变量. 可以看到,第4行定义的test方法可以访问第8行定义的

Static和Extern变量及函数

extern 声明全局变量,我们也可以将全局变量a声明为局部变量后再使用!!! 你在一个源文件中无论写多少遍全局变量int a;,它们代表的都是同一个变量.还有一个事实,假如在另一个源文件中也有全局变量int a;,那么这两个源文件的所有全局变量int a;都代表着同一个变量. 注意了,不可以两个文件的所有全部变量a都用extern extern是用来声明已经定义过而且能够访问的变量 static 很多时候,我们并不想让源文件中的全局变量跟其他源文件共享,相当于私有的全局变量,那么你就得用sta

18-C语言static和extern关键字1-对函数的作用

一.extern与函数 在第三讲和第四讲中,我提到过一句话:如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.obj中定义的一个函数.将这些相关联的目标文件链接在一起后才能生成可执行文件. 先来理解2个概念: 外部函数:如果在当前文件中定义的函数允许其他文件访问.调用,就称为外部函数.C语言规定,不允许有同名的外部函数. 内部函数:如果在当前文件中定义的函数不允许其他文件访问

《OOC》笔记(1)——C语言const、static和extern的用法

<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用const修饰的函数形参 直接修饰 一个形如 int Minus(const int a, const int b, int testCase); 的函数,const的意义是什么呢? 答:参数a被const修饰,说明在Minus函数内,编译器不允许a被别的变量(例如x)赋值(修改).参数b同理. 如果你写了a