c语言函数声明假设主函数main() 。其他函数void fun(int a,int *b) 。
关于函数定义和声明:
在代码中fun函数,有完整函数体的代码就是函数定义部分,比如void fun(int a,int *b){ 。。。}; 。
如果没有具体实现的函数体代码(也就是大括号内容),那么就是函数声明 。比如void fun(int ,int *);
关于函数声明和调用:
如果fun函数定义在main代码上面 。比如:
void fun(int a,int *b){ 。。。};
int main(){
int a=0,int b=0;
......
fun(a,b);//这里fun定义代码在main上面,所以可以不需要声明 。反之需要先写声明语句
return 0;
}
关于函数局部变量及全局变量:
简单区分:
定义在函数之外的就是全局变量 , 这个变量所有函数都可以直接使用,并且共用同一个地址 。任意函数修改了变量值,其他函数调用也会变 。
定义在函数之内的就是局部变量,局部变量只属于该函数,其他函数即使定义了同样名字的变量,这两个变量也不同地址,互不相干 。
比如:
int a;//这就是全局变量,作用域下所有函数共用
int main()
{
int b;//这就是局部变量,只在本函数有效,如果想在调用fun函数时让fun也使用该变量 , 需要把这个变量的地址作为参数传递过去 。
printf("%d",b);
return 0;
}
注意:c语言中允许局部变量和全局变量同名,但是同名的局部变量会屏蔽全局变量 , 实际代码避免同名 。
关于函数传值和传址:
如函数void fun(int a,int *b){..........};这里形参a 和*b,分别表示一个值和一个地址
所以在调用该函数时,比如:
int main()
{
int c,d;
fun(c,d);//这里调用就对应上面形参类型 , 第一个参数传递了c的值(传值),第二个参数传递了d的地址(传址),这里c和d,叫做实参 。当fun函数运行时改变了a和b指向地址的值,对应main函数中c的值不变,d的值改变 。
return 0;
}
顺带一说:局部变量,在函数运行结束后会自动释放 , 所以想把局部变量地址作为返回值,需要用malloc函数申请 。(这里看不懂可以暂时忽视)
C语言函数声明我也来 说几句 。。
标准编译器 对函数的调用 都要
先申明 才能 调用
(生产的时候就这样设定的) 。。我推荐试用
大点的vs2005,vc2000.
小点的Dev-cpp ,Turboc 3.0 (2.0 不支持鼠标有点 麻烦)
这里 就涉及:申明和定义之间的区别 。
申明-- 不开辟内存,仅仅告诉编译器 , 申明的部分存在,要预留一点空间 。
定义-- 开辟内存 。
申明 属于 预编译范畴的 。最好写在头文件中(楼主,自定义头文件学了没有?。浚ㄉ昝鞫夹丛谕肺募?nbsp;, 只是一种好的编程习惯)
因为 在编译的时候,编译器先处理一些特殊数据(宏定义,函数的申明,变量的申明),在这个过程中,编译器 通过申明 可以预测整个定义需要的内存大?。⑶?把这些大小预留起来,留给定义的时候使用(因为虽然定义,但是在 main函数里面没有调用 , 一样的不分配内存) 。
如果不事先申明,直接定义,有可能会造成系统崩溃,出现内存不足 , 不能分配 。然而现在内存都是1G左右了,所以一般空间都足够,所以你也可以不申明直接定义函数 。
但是一旦内存紧张,就会出错 , 而且程序简洁性就很低 。(不看到定义,还不知道原来还定义了这么一个函数?。。。?
还有 变量也一样,标准的都是 先申明在定义 。
推荐阅读
- 霸气名字网络游戏,霸气名字网络游戏男
- 电脑怎么修复启动硬盘故障,修复硬盘启动项
- 商业用地能开发什么游戏,商业用地可以建什么项目
- pbf文件怎么转word,pbf文件怎么转换为bwg格式
- go语言在哪用 go语言使用
- 老是显卡驱动异常怎么回事,显卡驱动存在问题怎么回事
- 如何小程序定制模板,小程序定制开发步骤
- b站显示没有直播但却在直播,b站直播怎么没了
- linux二个命令竖 linux竖杠