c语言存储类里的关键字有哪些

发布时间:2021-11-22 15:32:31 作者:iii
来源:亿速云 阅读:172

本篇内容主要讲解“c语言存储类里的关键字有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c语言存储类里的关键字有哪些”吧!

-auto-


(1)auto关键字在C语言中只有一个作用,那就是修饰局部变量。


(2)auto修饰局部变量,表示这个局部变量是自动局部变量,自动局部变量分配在栈上。(既然

在栈上,说明它如果不初始化那么值就是随机的······)。


(3)平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。可见,auto的局部变量其实就是默认定义的普通的局部变量。


- static -


(1)static关键字在C语言中有2种用法,而且这两种用法彼此没有任何关联、完全是独立的。其实当年本应该多发明一个关键字,但是C语言的作者觉得关键字太多不好,于是给static增加了一种用法,导致static一个关键字竟然有两种截然不同的含义。


(2)static的第一种用法是:用来修饰局部变量,形成静态局部变量。要搞清楚静态局部变量和非静态局部变量的区别。本质区别是存储类不同(存储类不同就衍生出很多不同):非静态局部变量分配在栈上,而静态局部变量分配在数据段/bss段上, 在数据段的话,它是初始化好的,在bss段的话,一般我们没有初始化的,一般默认0,这个和全局变量不初始化一样。


#include <stdio.h>

int main(void)
{
    static a;

    printf("the a is %d\n",a);

    return 0;
}
 


演示结果:


    the a is 0 


(3)static的第二种用法是:用来修饰全局变量,形成静态全局变量。要搞清楚静态全局变量和非静态全局变量的区别。区别是在链接属性上不同,等下面有介绍的。这里的话我举几个例子来说明:


------没用static关键字修饰:


  #include <stdio.h>

   void test()
  {
       int num = 0;
       num++;
       printf("%d ", num);
  }
   int main()
   {
       int i = 0;
      for (i = 0; i < 10; i++)
      {
        test();
      }
       return 0;
   }
    

演示结果:

1 1 1 1 1 1 1 1 1 1 


-----加了static修饰:

  #include <stdio.h>

   void test()
  {
      static int num = 0;
       num++;
       printf("%d ", num);
  }
   int main()
   {
       int i = 0;
      for (i = 0; i < 10; i++)
      {
        test();
      }
       return 0;
   }
 

演示结果:


    1 2 3 4 5 6 7 8 9 10 

(4)小结:



(5)静态函数(就是使用这个static关键字修饰),想必搞stm32的读者,都有接触到(这里的话,我就不例子了);当你的程序中有很多源文件的时候(这在写stm32的时候经常遇到,而且经常要养成多文件不被重复包含的写法代码习惯),一般在stm32里面会使用这个static关键字来修饰函数,所以这个函数就只能在这个文件内使用了,不能在外部再使用这个函数了(这个函数的作用域只能在当前文件内),其实和上面讲全局变量和静态全局变量的区别类似。


- register -


(1)register关键字不常用,也只有一个作用,那就是:register修饰的变量。编译器会尽量将它分配在寄存器中。(平时分配的一般的变量都是在内存中的,其实读取内存中的数据过程是这样的:cpu+寄存器+cache+内存)。分配在寄存器中一样的用,但是读写效率会高很多。所以register修饰的变量用在那种变量被反复高频率的使用,通过改善这个变量的访问效率可以极大的提升程序运行效率时。所以register是一种极致提升程序运行效率的手段。


(2)平时写代码要被定义成register这种情况很少,一般慎用。


(3)register编译器只能承诺尽量将register修饰的变量放在寄存器中,但是不保证一定放在寄存器中。主要原因是因为寄存器数量有限,不一定有空用。

到此,相信大家对“c语言存储类里的关键字有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 中端存储里的“高端范”
  2. C语言存储类关键字

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:在安装opencv时如果升级了macOS Sierra可能会遇到什么错误

下一篇:c语言怎么实现含递归清场版扫雷游戏

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》