Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41038
  • 博文数量: 7
  • 博客积分: 76
  • 博客等级: 民兵
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-29 20:03
文章分类

全部博文(7)

文章存档

2013年(7)

我的朋友

分类: C/C++

2013-01-28 20:53:16

C 语言中的一个重要的观念是,每个程序都应切割成许多小的函数。

一、程序的结构

下面来看一个图来说明一下:

在图中每个函数在程序中可以只执行一次,实际上每个函数可以执行多次,且可以从程序中多个地方调用。

在了解如何定义自己的函数之前,要先了解变量的另外一个重要的方面

1、变量的作用域和生存期

我们都知道在定义main()函数体的起始处声明程序的变量。事实上可以在任何代码块的起始处定义变量。这样做有大的区别的。变量只在于定义它们的块中。它们在声明时创建,在遇到下一个闭括号时就不存在了。

在一个块内的其他块中声明的变量也是这样。在外部块的起始处声明的变量也存在于内部块中。这些变量可以随意使用,只要内部块中没有同名的变量即可。

变量在一个块内声明时创建,在这个块结束时删除,这种变量称为自动变量,因为它们是自动创建和删除的。给定变量可以在某个程序代码块中访问和引用,这个程序代码块称为变量的作用域。在作用域内使用变量是没有问题的。但是如果试图在变量的作用域外部引用它,编译程序时就会得到一条错误信息,因为这个变量在它的作用域之外不存在。

可以通过一个例子来了解下作用域


#include 

int 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()函数(在头文件中声明)返回的值乘以2.0,结果存储到变量result中。很明显,返回类型为void的函数不返回任何值,所以不可能成为表达式的一部分。

1.1、函数的命名

-----------------------------------------未完------------------------------------------待续--------------------0.0


阅读(1831) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~