aihot  2020-11-12 10:26:40  OpenCV |   查看评论   
(qq>=BUFSIZ-1) printf("数字太多!"); else Buf[++qq]=c; }

4.4 作用域规则

外部变量和函数的作用域是从它们声明的地方到文件的结尾

如果要在外部变量之前使用变量,或者外部变量在另一个文件中要使用变量时,必须用extern关键字进行声明。注意声明与定义的区别,变量在被定义时分配了存储空间,而声明并没有重新建立变量或分配空间。

4.5 头文件

在实际的大型程序中,往往会把程序放在多个文件中,不同的文件一般完成指定的功能,如4.3中的例子,可以把push与pop函数及相关声明放在stack.c文件中,把getop放在getop.c文件中,把getch与ungetch放在getch.c文件中,而几个文件可能共用了一些定义与声明,我们可以将他们在放一个单独的头文件cal.h里。

4.6 静态变量

外部变量或函数前面加上关键字 static后,该外部变量或函数只能被所在的文件所引用,不能被其他文件使用。

自动变量前面加上关键字statci后,该变量会一直存在内存中,不会因为程序块或函数的退出而消失。

4.7 寄存器变量

如要某些变量在程序中使用的频率很高,则可以声明为寄存器变量,寄存器变量只能适用于自动变量及函数参数的形式:

f(register unsigned m,register long n) {     register int i;     ... }

寄存器变量表明变量保存在系统的寄存器里,值得注意的就是寄存器变量是没有地址的。

4.8 程序块结构

程序块中的变量属于自动变量,其变量名可以与程序块外面的变量名重复,应该区别对待。

4.9 初始化

在不进行显式初始化的情况下,外部变量与静态变量被初始化为0,自动变量与寄存器变量的初值没有意义。

数组与字符数组的初始化,字符数组可以直接用一个字符串来进行初始化。

4.10 递归

C语言中允许让函数本身调用本身,这种形式叫递归,递归并不节省存储器的开销,因为在递归的过程中系统必须维护一个存储处理值的栈,递归的执行速度并不快,但是程序会比较紧凑。

下面通过一个快速排序的例子说明函数的递归调用,程序先选取数组中间的一个元素作为阈值,将数组分为2部分,比阈值小的和比阈值大的,然后再把两个子数组依次分类下去,直到子数组只有一个数字为止。

/*快速排序的递归写法*/ void Qsort(int ar[],int left,            
          
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自《TCPL》 第4章 函数与程序结构

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]