c语言基础4—static、extern对函数和变量的作用



一、statc和extern对函数的作用

1、函数是分类型的,外部函数和内部函数。定义的函数能被外部文件和本文件所访问的函数为外部函数。只能被本文件访问的函数为内部函数。默认情况下所有函数都是外部函数。整个程序中不允许有同名的外部函数。

[java]  view plai
  1. //如下两行代码时有区别的
  2. //声明了一个静态函数
  3. static int hello;

  4. //extern默认省略
  5. int hello;

  6. //默认请款下所有函数都是外部函数,但完整声明一个外部函数需要加extern关键字,extern 可以省略。
  7. extern int hello()
  8. {
  9. ……;

  10. //声明一个内部函数,这个函数只能在函数内部访问。
  11. static int hello()
  12. {
  13. ……;
  14. }


二、static和extern对全局变量的作用

1、全局变量分两种,内部变量和外部变量。能被本文件和其他文件访问的是外部变量。只能被本文件访问的变量是内部变量,从定义的那一个行开始。默认情况下所有变量都是外部变量,整个程序都能访问,不同文件的同名外部变量都代表同一个变量。

2、需要注意的是,extern关键字对全局变量的作用只是声明,而不是定义,默认就是外部变量加上extern反而不是定义一个变量。如果想要定义一个内部变量则需要明确加上static。


[java]  view plai
  1. //全局变量分两种,内部变量,外部变量
  2. //声明了一个外部变量
  3. int hello;

  4. //此处的extern是声明一个外部变量,为后面的hello变量声明。这个声明同样可以放在方法内部。
  5. //extern对全局变量的作用不代表定义,而是声明。定义是需要开辟内存空间的。
  6. //声明是告诉程序我后面有定这个变量,只不过我提前拿来用。
  7. extern int hello;

  8. int main()
  9. {
  10. //这个是外外面的全局变量进行一个声明,声明以备可以在明确定义变量之前可以使用它。
  11. extern int hello;

  12. //这是重新定义一个局部变量
  13. int fuck;
  14. }

  15. 定义一个全局变量,而且是外部全局变量。
  16. int hello;

三、static对局部变量的作用

1、static改变了局部变量声明周期,整个程序运行期间都在,但并没有改变它的作用域。使用场景,调用这个变量特别频繁,并且值不需要修改。

[java]  view plai
  1. void test()
  2. {
  3. int a = 0;
  4. a++;
  5. //每次打印都是同一个值,因为函数一调用完,局部变量就注销,下次调用再重新分配内存空间。
  6. printf(“%d\n”, a);

  7. static int b = 0;//加上两一个static关键字
  8. b++;
  9. //这个变量的声明周期很长,再整个程序执行期间都会存在,在第一次调用时
  10. printf(“%d\n”, b);
  11. }
  12. void main()
  13. {
  14. test();
  15. test();
  16. }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值