2013年(7)
分类: C/C++
2013-01-28 20:53:16
C 语言中的一个重要的观念是,每个程序都应切割成许多小的函数。
一、程序的结构
下面来看一个图来说明一下:
在图中每个函数在程序中可以只执行一次,实际上每个函数可以执行多次,且可以从程序中多个地方调用。
在了解如何定义自己的函数之前,要先了解变量的另外一个重要的方面
1、变量的作用域和生存期
我们都知道在定义main()函数体的起始处声明程序的变量。事实上可以在任何代码块的起始处定义变量。这样做有大的区别的。变量只在于定义它们的块中。它们在声明时创建,在遇到下一个闭括号时就不存在了。
在一个块内的其他块中声明的变量也是这样。在外部块的起始处声明的变量也存在于内部块中。这些变量可以随意使用,只要内部块中没有同名的变量即可。
变量在一个块内声明时创建,在这个块结束时删除,这种变量称为自动变量,因为它们是自动创建和删除的。给定变量可以在某个程序代码块中访问和引用,这个程序代码块称为变量的作用域。在作用域内使用变量是没有问题的。但是如果试图在变量的作用域外部引用它,编译程序时就会得到一条错误信息,因为这个变量在它的作用域之外不存在。
可以通过一个例子来了解下作用域
#includeint main(void) { int count1 = 1; do { int count2 =0; ++count2; printf("\ncount1 = %d count2 = %d", count1,count2); } while(++count1 <= 8); printf("\ncount1 = %d\n", count1); return 0; }
这个程序的输出如下:
count1 = 1 count2 = 1
count1 = 2 count2 = 1
count1 = 3 count2 = 1
count1 = 4 count2 = 1
count1 = 5 count2 = 1
count1 = 6 count2 = 1
count1 = 7 count2 = 1
count1 = 8 count2 = 1
count1 = 9
由上面的例子可看出变量的作用域。
2、变量的作用域和函数
每个函数体都是一个块(当然,它可能含有其他块)。因此,在一个函数内声明的自动变量是这个函数的本地变量,在其他地方不存在。所以一个函数内部声明的变量完全独立于在其他函数内声明的变量。可以在不同的函数内使用相同的变量名称,它们完全独立的。
二、函数
可以通过两种方法接收函数返回的信息。第一种方法是使用函数括号内的一个参数。通过函数的一个参数提供变量的地址,这个函数会在该变量中放置一个值。例如,使用scanf()从键盘上读取数据时,输入会存储到一个作为参数提供地址中。第二个方法是通过返回值接收函数传回的信息。例如对于strlen()函数,当调用该函数时,该函数会返回程序代码作为参数传递给它的字符串长度。因此,如果在表达式2*strlen(str)中,str是字符串”example",strlen()函数返回的值就是7,接着用值7取代表达式中的函数调用。因此,这个表达式是2*7.函数会返回一个特定类型的值,所以在能使用该类型变量的任意表达式中,都可以使用函数调用,作为表达式的一部分。
还一点要记住,所有的程序都必须编写函数main()
1、定义函数
创建一个函数时,必须指定函数头作为函数定义的第一行,跟着是这个函数放在括号内的执行代码。函数头后面放在括号内的代码块称为函数体。
@ 函数头定义了函数的名称、函数参数(也就是,即调用函数时传给函数的值的类型)和函数返回值的类型。
@ 函数体决定函数对传给它的值执行什么操作。
函数的一般形式和main()相同,如下所示 :
Return_type Function_name ( Parameters - separated by commas)
{
Statements;
}
函数体内可以没有语句,但是大括号必须有,如果函数体内没有语句,返回类型必须是void,此时函数没有任何作用。void类型表示“不存在任何类型”,所以这里它表示函数没有返回值。没有返回值的函数必须将返回类型指定为void,而返回类型不是void的函数都在函数体中有一个return语句,返回一个指定返回类型的值。
没有函数体的函数通常在复杂程序的测试阶段使用。这允许在执行程序时,只用选定的函数执行一些操作,然后逐步增加函数体中的代码,直到完成整个工作。
括号中的参数是变元值的占位符,调用一个函数时,必须指定参数的值。术语“参数”表示函数定义一个占位符,指定了调用函数时传送给函数的值的类型。参数包含在函数体用来表示函数执行时使用的数据类型和名称。术语“变元”表示调用函数时提供的对应于参数的值。
注意 函数体内的语句也可能含有嵌套的语句。但不能在一个函数体内定义另外一个函数
调用函数的一般形式是:
Function_name(List of Arguments - separated by commas)
使用函数名后跟括号内一连串以逗号分隔为变元,与调用printf()和scanf()函数一样。函数调用可以显示在一行中,如下:
printf("A fool and your money are soon partners,");
像这样调用的函数可以是有返回的函数。在这个例子中,返回值会被丢弃。返回类型定义为void的函数只能这样调用。有返回值的函数通常会出现在表达中,例如:
result = 2.0*sqrt(2.0);
sqrt()函数(在头文件
1.1、函数的命名
-----------------------------------------未完------------------------------------------待续--------------------0.0