当前位置:C++技术网 > 资讯 > C语言基础教程:8 函数入门2

C语言基础教程:8 函数入门2

更新时间:2015-08-29 00:17:15浏览次数:1+次

上一讲讲了函数的一些基本语法,这一讲当然要讲的深入一些。很多人初学C语言的时候都很困惑一个概念:定义和声明。就从变量的定义和声明讲起吧。先说说声明的作用吧,声明是告诉编译器这个变量是什么类型的,编译器做类型检查时就用的到了,还有一个作用就是扩大了变量的作用域,变量的作用域就扩展到什么处了,好了现在来说说定义是什么。定义就是给变量关联一块内存单元。看到区别了吧,定义是分配内存而声明却另作他用。不要去看书上讲的什么赋值就是定义否则就是声明,错误的说法。

extern int m;//变量什么,这是重点,这个声明就拓展了变量的作用范围,
             //你去了这个什么语句看看会不会报错
int main()
{
	int k;//函数定义,不要像有的书上说的那样说是及有定义又有声明,那样会晕的
	printf("调用函数之前m的值为:%d\n",m);
	test();
	printf("调用函数之后m的值为:%d\n",m);
	return 0;
}
void test()//函数定义
{
	++m;
}

int m=1;//这才是变量定义



变量有声明和定义之分当然函数也就有声明和定义之分了。(你是否考虑过这么一个问题:函数与变量到底有什么内在的联系?或者他们的本质归于何处?)函数的定义是实现函数的具体逻辑而声明则是方便编译器进行函数调用检查罢了,当然无形之中也就拓展了函数的作用域。

如:

        #include <stdio.h>
        int Test(int n);//此处为函数声明
        int main()
        {
	        int n=0,sum=0;
	        printf("请输入累加求和的尾数:\n");
	        scanf("%d",&n);
                 sum=Test(n);
	        printf("%最终求和结果为:%d\n",sum);
	        return 0;
        }
            int Test(int n)//此处为函数定义
            {
	            int sum=0,i;
	            for(i=0;i<=n;i++)
 	            {
		            sum+=i;
	            }
                       return sum;
            }


当然,有些书上可能会将函数定义放在main函数之前,从而就省略了声明这一步,这也是可以的因为它能够告诉编译器这个函数的类型以及具体实现了,但这绝对不是一个好习惯,因为没有一个大一点的项目是将函数定义放在main之前的,那还要头文件干什么,好习惯就是要从开始学养起。

 

下面初次揭秘两个重要的函数:printfscanf,分别叫做格式化输出函数和格式化输入函数,“格式化“这三个字似乎已经点出了这两个函数的部分作用了——按照你指定的格式进行输入或者输出。千万不要小看这两个函数,这里边的水可深了,有很多“阴暗”的地方。比如printf的格式化表达式到底如何工作的,不定长参数在传参时会有什么小动作,scanf又是如何工作的呢?这些问题都是后边要进行专题讲解的,学到这边时你就很普通的用就可以了。

 

好了这讲就讲这么多,别以为内容少?真的少吗?不少,你问问有多少人能回答出来定义和声明的区别以及各自的作用。况且这里还涉及到函数的声明和定义。

总结一下:声明是为了给编译器提供信息,好让编译器在编译时检查错误

          变量定义是管理内存,函数定义是为了实现具体的逻辑