亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C 存储类

C 存储类

在本教程中,您将了解局部和全局变量的范围和生命周期。此外,您还将了解静态变量和寄存器变量。

C编程中的每个变量都有两个属性:类型和存储类。

类型是指变量的数据类型。而且,存储类决定了变量的范围、可见性和生命周期。

存储类有4种:

  1. 自动
  2. 外部
  3. 静态
  4. 注册

局部变量

在块内声明的变量是自动变量或局部变量。局部变量只存在于声明它的块内。

举个例子吧。

#include <stdio.h>

int main(void) {
  
  for (int i = 0; i < 5; ++i) {
     printf("C programming");
  }
  
 // Error: i is not declared at this point
  printf("%d", i);  
  return 0;
}

当你运行上面的程序,你会得到一个错误 undeclared identifier i .这是因为 ifor 中声明 循环块。在区块之外,它是未声明的。

我们再举一个例子。


int main() {
    int n1; // n1 is a local variable to main()
}

void func() {
   int n2;  // n2 is a local variable to func()
}

在上面的例子中,n1main() 是本地的 和 n2func() 本地的 .

这意味着您无法访问 n1 func() 内的变量 因为它只存在于 main() .同样,您无法访问 n2 main() 内的变量 因为它只存在于 func() .


全局变量

在所有函数之外声明的变量称为外部变量或全局变量。它们可以从程序内的任何函数中访问。


示例 1:全局变量

#include <stdio.h>
void display();

int n = 5;  // global variable

int main()
{
    ++n;     
    display();
    return 0;
}

void display()
{
    ++n;   
    printf("n = %d", n);
}

输出

n = 7

假设,在 file1 中声明了一个全局变量 .如果您尝试在不同的文件 file2 中使用该变量 ,编译器会抱怨。为了解决这个问题,关键字extern 用于file2 表示外部变量是在另一个文件中声明的。


注册变量

register 关键字用于声明寄存器变量。寄存器变量应该比局部变量快。

但是,现代编译器非常擅长代码优化,很少有机会使用寄存器变量让你的程序更快。

除非您在嵌入式系统上工作,并且知道如何为给定应用程序优化代码,否则不会使用寄存器变量。


静态变量

使用 static 声明静态变量 关键词。例如;

static int i;

静态变量的值一直持续到程序结束。


示例 2:静态变量

#include <stdio.h>
void display();

int main()
{
    display();
    display();
}
void display()
{
    static int c = 1;
    c += 5;
    printf("%d  ",c);
}

输出

6 11

在第一次函数调用期间,c 的值 初始化为 1。它的值增加了 5。现在,c 的值 是6,打印在屏幕上。

在第二次函数调用期间,c 不会再次初始化为 1。这是因为 c 是一个静态变量。值 c 增加了 5。现在,它的值将是 11,打印在屏幕上。


C语言

  1. C# 变量和(原始)数据类型
  2. C# 变量范围
  3. C# 静态关键字
  4. C++ 类模板
  5. C 变量、常量和文字
  6. C++ 变量和类型:int、double、char、string、bool
  7. Java - 变量类型
  8. C - 变量
  9. C - 存储类
  10. C - 范围规则
  11. C - 指针
  12. C - 变量参数