关于C语言的一道题目 内部函数 外部函数

作者&投稿:潮亭 (若有异议请与网页底部的电邮联系)
请问一道有关c语言的题?~

c语言中static 变量
1. static 变量

静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

2. 静态局部变量
静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。

(2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。
(3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

3.静态全局变量
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。

4. static 函数…..

内部函数和外部函数

当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。
1 内部函数(又称静态函数)
如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。
定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:
static 函数类型 函数名(函数参数表)
{……}
关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

2 外部函数
外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:
[extern] 函数类型 函数名(函数参数表)
{……}
调用外部函数时,需要对其进行说明:
[extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];

[案例]外部函数应用。
(1)文件mainf.c
main()
{ extern void input(…),process(…),output(…);
input(…); process(…); output(…);
}

(2)文件subf1.c
……
extern void input(……) /*定义外部函数*/
{……}
(3)文件subf2.c
……
extern void process(……) /*定义外部函数*/
{……}
(4)文件subf3.c
……
extern void output(……) /*定义外部函数*/
{……}

函数都有各自的功能,根据函数功能来看吧,不能一概而论。
简单的话就在函数内处理,如果有多处的话可以封装单独的函数来处理;建议后者,便于扩展、模块化;

因为
C语言编译时要检查语法,所以A不对;
C语言没有过程,只有函数,所以B不对;
C语言函数内不能定义函数,既不能嵌套定义,所以C不对。
排除法也知道是D了。当然由“函数内不能定义函数”也可以推出所有函数都是外部函数。
—— 其实这种说法对外部函数的理解也还值得商榷。但其它的是完全不对,也就选它吧。

答案是B. C语言中,可以在一个函数中嵌套一个函数,但是不能在一个函数中定义一个函数,D中,只有在函数外部定义的函数才是外部函数,因此D错

A:C语言编译时不检查语法 // 编译时要做词法、语法检查
B:C语言的子程序有过程和函数两种 // C语言没有“过程”,都是函数
C:C语言的函数可以嵌套定义 // C语言不能嵌套定义
D:C语言所有函数都是外部函数 // 函数声明默认都为extern,即外部函数声明;与之相对应的为static声明

A项:c语言程序编译时肯定要检查语法!这点相信你也明白吧!
B项:c中过程不存在,只有函数的概念。(我觉得过程与函数的概念差不多)
C项: 函数是不可以嵌套定义,所谓嵌套定义就是在一个函数中有包括一个函数的定义完整过程,它与函数的调用是不同的,函数调用时在一函数中只有另一个调用函数的函数体并没有函数的定义过程。
D项:嵌套函数就是属于内部函数,而在C语言中是不允许发生这种情况的,只能由函数调用。函数都是外部函数。



请问您这道题是在哪看到的 太谢谢您了


一道关于C语言的题目:编写程序,把键盘输入的字符串中的数字字符删除,然 ...
把不是数字字符“自己向自己拷贝”即可。举例代码如下:\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.#include "stdio.h"int main(void){char str[500]; int i,j; printf("Input a string...\\nstr="); scanf("%s",str); for(j=i=0;str[i];i++) ...

一道简单的c语言题~~~要的不只是答案。(13)
你这题目是不是有问题啊?(*f1)()=fun,ch;是不是你在别的地方复制的或者是你在抄这道题目时搞错了。我大概了解你这到题目的意思。这道题目应该是想通过函数指针调用函数fun。首先函数指针的定义就出错了。你题目里面的f1应该就是一个函数指针,但是它的定义应该这样char (*f1)(char *)=fun;我...

C语言题目:一个数如果恰好等于它的因子之和,这个数就称为“完数...
include <stdio.h> include <conio.h> void main(){ int m,i,s;for(m=1;m<=1000;m++) \/\/从1开始到1000循环结束 { s=0;\/\/初始化因子之和s为0 for(i=1;i<m;i++) \/\/寻找在1到m之间,有多少m的因子 if(m%i==0) \/\/如果m能整除i,则i为m的因子 s=s+i;\/\/将因子累加 if...

一道C语言很简单的题目,懂C语言的进来帮忙解下
首先要知道? :这是一个三目运算符,如 (表达式)? x : y, 意思是说如果表达式是正确的,那么就选择x,如果错误的就选择y。那我们看这里,可以分成三部分(a++<b) ? (a++):(c<d?a++:d)。而后面的(c<d?a++:d)又可以分成三部分(c<d) ? (a++):(d)。我们先看第一个式子...

一道C语言的编程题,兔子洞的问题。
include <stdio.h> int main(){ \/\/Hole表示20个三洞 ,Hole【21】是为了数组下标从1开始,方便对题目的理解 \/\/初始化为0,表示还没有被 灰狼搜索 int Hole[21] = {0};int i = 1,j;\/\/进行15次循环,表示灰狼搜索了15次 for(j = 1; j <= 15; j++){ Hole[i] = 1; \/\/将洞...

C语言的一道菜鸟题目...
include main(){ int day,sign;do{ printf("\\n输入今天的星期:\\t");scanf("%d",&day);if(day==6||day==7)printf("周末愉快\\n");else if(day<6&&day>0)printf("工作日愉快\\n");else printf("输入错误\\n");printf("是否继续 输入?(“Y”为继续,按任意键退出):\\t");}...

一个C语言的编程题目,请高手帮忙!谢谢!
\/*第一题:从键盘输入任意两个正整数x和y,编程求出两数的最大公因子和最小公倍数 \/ include <stdio.h> int main(void){ unsigned int x,y,i,a,b;printf("请输入两个正整数x和y:");scanf("%d %d", &x,&y);if (x < 2 || y < 2) { printf("无效的输入\\n");return 0;}...

一道c语言题,k初始值为1,求过程
这题要明白的是k++和++k的区别 k++:先将k的值作为表达式的值后k自加1 ++k:k自加1后k的值作为表达式的值 所以运行过程是这样的:k=1,输出1后k自加1等于2,输出2换行 输出2,2后k自减1等于1换行 k自加1后的等于2后输出2,再输出2换行 输出-k即-2,再输出k即2后k自加1等于3 跳出...

c语言一道题目,求解,若a是int型变量,且a的初值为6,则执行表达式a+=a-=...
从右往左依次计算 a-=a*a得到a=a-a*a=6-6*6=-30 a+=a得到a=a+a=-60 所以最后a的值为-60

一道c语言的题目
解释如下:int k,j,s;for (k=2;k<6;k++,k++){s=1;for(j=k;j<6;j++) s+=j;} printf("%d\\n",s);第一次循环:for (k=2;k<6;k++,k++){s=1;for(j=k;j<6;j++) s+=j;} 执行执行过程为:k=2<6,s=1,j=k=2<6,执行s+=j即s=s+j=1+2=3,此时执行for(j=k...

墨脱县17891987559: 关于C语言的一道题目 内部函数 外部函数下列叙述中正确的是().A:C语言编译时不检查语法B:C语言的子程序有过程和函数两种C:C语言的函数可以嵌套定... -
梅刷弗米:[答案] 因为 C语言编译时要检查语法,所以A不对; C语言没有过程,只有函数,所以B不对; C语言函数内不能定义函数,既不能嵌套定义,所以C不对. 排除法也知道是D了.当然由“函数内不能定义函数”也可以推出所有函数都是外部函数. —— 其实这...

墨脱县17891987559: 关于C语言的一道题目 内部函数 外部函数 -
梅刷弗米: 因为 C语言编译时要检查语法,所以A不对;C语言没有过程,只有函数,所以B不对;C语言函数内不能定义函数,既不能嵌套定义,所以C不对.排除法也知道是D了.当然由“函数内不能定义函数”也可以推出所有函数都是外部函数.—— 其实这种说法对外部函数的理解也还值得商榷.但其它的是完全不对,也就选它吧.

墨脱县17891987559: 在C语言中,内部函数和外部函数的区别? -
梅刷弗米: 内部函数跟外部函数的区别在于:一个文件中定义的函数能否被其它文件调用.能被调用的函数在前面加extern(一般省略),而不能被调用的加static(不能省略),通常函数本质上是全局的,也就是外部的可调用的. 我们通常调用的#include本质上就是一些外部函数的集合,由于在一个文件中的函数要调用另外一个文件的函数,要求在开始声明一下,为了省略这些声明,我们引用include命令.

墨脱县17891987559: 有关C语言的内部函数和外部函数的定义说明 -
梅刷弗米: 有两种理解.(1)库函数是C语言的内部函数或自带函数,外部函数即程序员自定函数. (2)凡加写了extern 的函数是外部函数. 第一种理解好懂: C语言的内部函数指的是C语言自带的函数,无论是动态链接的或静态链接的. 这些函数通过C语言...

墨脱县17891987559: C语言中,若为指定函数是内部函数或外部函数,则默认该函数是什么 -
梅刷弗米: 一般是整型 int比如你这样写: main() { return 0; }和int main(void) {return 0;}结果一致

墨脱县17891987559: 什么是外部函数?什么是内部函数? -
梅刷弗米: 定义在当前翻译单元(一般是.c文件包含了头文件之后的结果)外,以extern前缀声明的函数对于当前翻译单元来说是外部函数.它提示编译器,假定这个函数的定义存在,但不在当前翻译单元中.因此若语法正确,编译器不对此函数产生标识...

墨脱县17891987559: 什么叫外部函数? (C语言问题) -
梅刷弗米: 不知道你说的是不是用extern定义的函数 在C里,extern是告诉编译器某个变量或是函数已经存在于另一个已经编译好的文件中,即外部变量或函数.(比较include,是包含还没有编译的)这样在link的时候会自动寻找.在c++里,extern除了C里的功能,还有定义用其他语言编译好的外部变量或函数

墨脱县17891987559: C语言中函数内部声明的静态变量的在函数外可以访问吗? -
梅刷弗米: 不可以只有全局变量才可以静态变量,只是里面的值不会因为函数调用结束而还原

墨脱县17891987559: c语言中外部函数是什么意思 -
梅刷弗米: 有两种理解.(1)库函数是C语言的内部函数或自带函数,外部函数即程序员自定函数.(2)凡加写了extern 的函数是外部函数.第一种理解好懂:C语言的内部函数指的是C语言自带的函数,无论是动态链接...

墨脱县17891987559: 关于C语言的一道简单题.
梅刷弗米: #include<stdio.h> # define SIZE 100 void findmax(char str[]); main() { int i,j,max; char str[SIZE]; printf("input the string('#' to end)\ "); gets(str); printf("the longest word is:\ "); findmax(str); system("pause"); return 0; } void findmax(char str[]) { int i...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网