A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请问:外部函数,内部函数,外部变量,内部变量它们之间的联系和区别

5 个回复

倒序浏览
凡是在函数内或复合语句中定义的变量都是局部变量。其作用域限制在函数内或复合语句内,函数或复合语句外的不能引用该变量。
在函数外部定义的变量都是全局变量,其作用域为从定义点到本文件末尾。文件内所有函数或复合语句均可调用。
函数本质上上是外部的,可以供本文件或其他文件中的函数调用,但是在其他文件调用时需要用extern对函数声明。如果定义函数时用static声明,表示其他文件不得调用此函数,即内部函数。

变量的区别就是这个作用域的问题。而函数的则是文件能不能调用的问题。

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
ls正解。不过有一点:默认情况下其他文件调用某文件定义的函数时extern可以省略不写,直接引入带函数声明的头文件即可
回复 使用道具 举报
rocki 发表于 2014-7-2 11:40
凡是在函数内或复合语句中定义的变量都是局部变量。其作用域限制在函数内或复合语句内,函数或复合语句外的 ...

在本文件的被调函数中,用static声明的变量可以延长生命周期至程序结束怎么解释?
回复 使用道具 举报
王海江1 发表于 2014-7-3 22:28
在本文件的被调函数中,用static声明的变量可以延长生命周期至程序结束怎么解释? ...

你说的应该是指的局部静态变量吧。    如果你希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即变量所占用存储单元不释放,在下一次函数调用时 ,该变量已有值。   能看明白么。。。有点抽象。。。
回复 使用道具 举报
王海江1 发表于 2014-7-3 22:28
在本文件的被调函数中,用static声明的变量可以延长生命周期至程序结束怎么解释? ...
  1. #include <stdio.h>

  2. int text(int n);

  3. int main()
  4. {
  5.         int i;
  6.         for(i=1;i<=5;i++)//循环调用5次TEXT函数
  7.         {
  8.                 printf("%d的阶乘为%d\n",i,text(i));
  9.         }
  10.         return 0;
  11. }

  12. int text(int n)
  13. {
  14.         static int t=1;//T保留上次调用结束时的值   
  15.         t=t*n;//在上次结束值基础上*n
  16.         return t;//返回值t是N的阶乘
  17. }

  18. /*程序输出结果为:
  19. 1的阶乘为1
  20. 2的阶乘为2
  21. 3的阶乘为6
  22. 4的阶乘为24
  23. 5的阶乘为120

  24. */
复制代码

这里说的就是你说的把变量t 生命周期延长至程序结束,
如果你直接定义int型 则默认为声明auto int ,即自动局部变量也叫动态变量。调用时分配内存。结束后清空。而用static 声明了就是分配内存给了值以后保存住。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马