C语言基础知识:存储类别

目录

自动存储类:auto

静态存储类:static

寄存器存储类:register

外部存储类:extern


在C语言中,存储类别是指用来描述变量或函数的存储方式和生命周期的关键字。在C语言中,一共有4种存储类别,分别是自动存储类、静态存储类、寄存器存储类和外部存储类。下面我们将分别介绍这四种存储类别的使用方法和示例代码。

自动存储类:auto

auto是默认的存储类别,也称为局部变量。在函数内部定义的变量默认为auto存储类别。auto变量的生命周期与其所在的函数相同。自动存储类的变量会在函数调用时被自动分配内存,在函数结束时自动释放内存。当函数执行完毕时,auto变量就会被销毁。

自动存储类的变量不会被初始化,其值是未知的。

使用方法:

auto int i;

示例代码:

#include 
void func()
{
    auto int i = 0; // 定义自动存储类变量
    i++; // 对变量进行操作
    printf("i = %d\n", i);
}
int main()
{
    func();
    func();
    return 0;
}

 输出

i = 1

i = 1

静态存储类:static

静态存储类(static) 静态存储类用于指定在函数内部或函数外部定义的静态变量。静态存储类定义的变量在程序执行期间一直存在,不会随着函数的结束而销毁。静态变量可以被多次调用,但只会被初始化一次。静态变量的作用域是局部作用域,但是在函数外部也可以访问,需要使用static关键字来声明。静态存储类的变量会被初始化为0或NULL。

使用方法:

static int i;

示例代码:

#include 
void func()
{
    static int i = 0; // 定义静态存储类变量
    i++; // 对变量进行操作
    printf("i = %d\n", i);
}
int main()
{
    func();
    func();
    return 0;
}

输出:

i = 1

i = 2 

寄存器存储类:register

寄存器存储类用于定义需要频繁访问的变量。寄存器变量存储在CPU的寄存器中,访问速度比内存快得多。但是并不是所有的变量都能存储在寄存器中。因为寄存器的数量有限,所以只有一些变量才能被放入寄存器中。使用register关键字声明的变量,只是对编译器的建议,不能保证被分配到寄存器中。

寄存器存储类的变量不能取地址,因为它们没有内存地址。

使用方法:

register int i;

示例代码:

#include 
void func()
{
    register int i = 0; // 定义寄存器存储类变量
    i++; // 对变量进行操作
    printf("i = %d\n", i);
}
int main()
{
    func();
    func();
    return 0;
}

 输出:

i = 1

i = 1

外部存储类:extern

外部存储类用于在不同的文件之间共享变量和函数。当在一个文件中定义了一个变量或函数,如果想在其他文件中使用它们,就需要使用extern关键字来声明。extern声明的变量或函数并不会分配内存空间,它只是告诉编译器在其他文件中有这个变量或函数的定义。

外部存储类的变量或函数可以在任何文件中访问,需要在使用前进行声明。

使用方法:

extern int i;

示例代码:

// 文件1.c
#include 
int i = 0; // 定义全局变量
void func()
{
    i++; // 对变量进行操作
    printf("i = %d\n", i);
}

// 文件2.c
extern int i; // 声明全局变量
int main()
{
    func();
    func();
    return 0;
}

 输出:

i = 1

i = 2

这就是C语言中的存储类别。通过使用不同的存储类别关键字,可以更加灵活地管理变量和函数的生命周期和存储方式。

你可能感兴趣的:(开发语言,java,开发语言,c语言)