C语言学习笔记(第一阶段:初识)<3>

21、关键字具体讲解
(1)typedef
typedef顾名思义是类型定义,这里应该理解成类型重命名(只能是对类型重命名)
typedef unsigned int uint;  //关键字typedef把unsigned int类型(无符号整型)重新命名为uint
int main()
{
    unsigned int num = 0;
    uint num2 = 1;  //此时。uint等价于unsigned int,可简化使命名更加方便
    return 0;
}

typedef struct Node
{
    int data;
    struct Node* next;
}Node; //给这个结构体类型起个新名字叫Node
int main()
{
    struct Node n;
    Node n2; //此处与上句命名形式完全等同
    return 0;
}

(2)static--静态的
<1>修饰局部变量(改变存储位置)
static修饰局部变量的时候,局部变量出了作用域,是不销毁的。
本质上,static修饰局部变量的时候,改变了变量的存储位置。
注:实际上,在C语言中,一块儿内存会划分区域使用。内存可分为栈区、堆区和静态区。局部变量
本来是存储在栈区的,栈区内变量的特点:进入它的作用域创建,出它的作用域销毁。而被static修饰的
局部变量改变了其存储位置,存放在静态区。静态区数据的特点是出了作用域不销毁,直到程序销毁时
它才销毁。因此,static影响了变量的生命周期,使其生命周期变长,和程序的生命周期一样。
void test()
{
    int a = 1; //局部变量存储在栈区的,进入它的作用域创建,出它的作用域销毁
    a++;
    printf("%d ", a);
}
int main()
{
    int i = 0;
    while (i<10)
    {
        test();
        i++;
    }
    return 0;
}//结果是2 2 2 2 2 2 2 2 2 2 

void test()
{
    static int a = 1; //局部变量存储静态区,特点是出了作用域不销毁,直到程序销毁时它才销毁
    a++;
    printf("%d ", a);
}
int main()
{
    int i = 0;
    while (i<10)
    {
        test();
        i++;
    }
    return 0;
}//结果是2 3 4 5 6 7 8 9 10 11
注:void的意思是不需要任何返回(return)

<2>修饰全局变量(改变链接属性)
不同全局变量是具有外部链接属性的,即在同一个源文件的不同c文件之间都能使用,但在使用前
要声明:extern int a;
而static修饰全局变量的时候,这个全局变量的外部连接属性就变成了内部连接属性,其它文件(.c)
就不能再使用这个全局变量了,但是在自己的.c内是可以使用的(给人的感觉就是作用域变小了)
注:全局变量是放在静态区的

<3>修饰函数(改变链接属性)
 一个函数也是本来具有外部连接属性的,不同c文件之间都能使用,但在使用前要声明:
extern int Add(int x, int y);
但是被static修饰的时候,外部连接属性就变成了内部链接属性,其他文件(.c)就无法使用了。

(3)register --寄存器关键字:会 建议 将变量存放在寄存器中(因为速度更快)
电脑上的存储设备:
寄存器(集成到CPU上)
高速缓存(cache)
内存
硬盘
注:越往上,所占空间越小、速度越快、造价越高;越往下,所占空间越大、速度越慢、造价越低;
int main()
{   
    //寄存器变量
    register int a = 3;//建议 将3存放在寄存器中
    return 0;
}

22.define定义常量和宏
<1>define定义标识符常量
#define NUM 100
int main()
{
    printf("%d\n", NUM);

    int n = NUM;
    printf("%d\n", n);  //与上种方式本质上是一样的

    int arr[NUM] = { 0 }; //此处NUM是个常量,是被define定义的标识符常量

    return 0;
}

<2>define定义宏(宏是替换的)
#define ADD(x,y) ((x)+(y)) //它实现的功能与下面函数是一样的
//ADD:宏名    x,y:宏的参数(无类型)  ((x)+(y)):宏体

//int ADD(int x, int y)
//{
//    return x + y;
//}

int main()
{
    int a = 10;
    int b = 20;
    int c = ADD(a, b); //在编译时它替换了宏体,a替换到x、b替换到y,即 int c = ((a)+(b));
    printf("%d\n", c);

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值