C语言基础之类型定义 typedef、static和extern及递归


一、类型定义 typedef

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

2.使用场合:

1>基本数据类型

2>指针

3>结构体

4>枚举

5>指向函数的指针

#include <stdio.h>
#include <string.h>
//基本数据类型
typedef int MyInt;

//指针
typedef char * Point;

typedef struct Person //Person 可以不写
{
    int age;
} * MyPer;

//结构体
typedef struct Student //Student 可以不写
{
    int age;
} MyStu;

//枚举
typedef enum Sex
{
    man,women
} MySex;

//指向函数的指针
void test(int a,int b)
{
    printf("sum---%d\n",a+b);
}
typedef void (* My) (int ,int);//My就是指针的新名称

int main()
{
    //自定义的类型定义变量
    MyInt a=90;
    printf("a=%d----size:%lu\n",a,sizeof a);
    
    //指针
    Point s="fghjj";
    printf("s=%s----size:%lu\n",s,strlen(s));
    
    struct Person p={33};
    MyPer per=&p;
    printf("age---%d\n",per->age);
    
    //结构体
    MyStu stu={23};
    printf("age---%d\n",stu.age);
    
    //枚举
    MySex ms=man;
    printf("%d\n",ms);
    
    My my=test;
    (*my)(2,3);
    
    return 0;
}
typedef和#define

注意:除了预处理语句,其他都有;

#include <stdio.h>
/*
 typedef int Myint0;
 #define Myint1 int
 上面两句可以等价,用起来一样。但是本质上typedef定义的是类型,而define是文本替换
  */
typedef char * String;
#define String1 char *

int main()
{
    
    String s1,s2;
    String1 s3,s4;
    s1="qwe";
    s2="sdf";
    s3="ghh";
    s4="ghkjn";//代码会崩溃
    /*
     String 是个类型,定义的s1和s2都是指针
     但是,String1是宏定义,只是文本替换
     因此就变成 char *s3,s4
     也就是char *s3;
          char s4;
     所以s4不是指针,是char类型
     
     */
    
    return 0;
}

二、static和extern

1.对函数的作用

函数分类:

        外部函数:定义的函数能被本文件和其他文件访问,默认情况下所有函数都是外部函数

                            不允许有同名外部函数

        内部函数:定义的函数只能被本文件访问,其他文件不能访问
                            允许不同文件中有相同的内部函数

static对函数的作用:

(1)定义一个内部函数

(2)声明一个内部函数

extern对函数的作用

(1)完整地定义一个外部函数  extern void test()

(2)完整地声明一个函数

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

2、对全局变量变量的作用

全局变量分2种:

全局变量可以重复定义,但是局部变量不行。

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

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

           不同文件中的同名外部变量都代表同一个变量。

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

           不同文件中的同名变量互不影响。

static作用:定义一个内部变量

extern作用:声明一个外部变量(全局变量)                          

3、static对局部变量的作用

(1)延长局部变量的生命周期。程序结束时,局部变量才会被销毁

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

(3)程序没退出的情况下多次调用含该变量的函数,访问的都是这同一个值

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

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

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

#include <stdio.h>

void test()
{
    static int a=0; //用static修饰,意味着直到程序结束才会被销毁
    a++;
    printf("a---%d\n",a);

}

int main()
{
    test();
    test();
    test(); //变量a都是指的同一个
    
    return 0;
}

三、递归

递归的两个条件:

    函数自己调用自己

    必须有明确的返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值