C语言高级知识点滴

来源:互联网 发布:linux下启动oracle11g 编辑:程序博客网 时间:2024/06/06 07:42

C语言规定对scanf和printf这两个函数可以省去对其头文件的包含命令。

对于局部变量的定义和说明,可以不加区分。而对于外部变量则不然,外部变量的定义和外部变量的说明并不是一回事。外部变量定义必须在所有的函数之外,且只能定义一次。其一般形式为: [extern] 类型说明符 变量名,变量名… 其中方括号内的extern可以省去不写。
例如: int a,b; 等效于:extern int a,b;
而外部变量说明出现在要使用该外部变量的各个函数内. 在整个程序内,可能出现多次,外部变量说明的一般形式为: extern 类型说明符 变量名,变量名,…(注意必须有extern ) 外部变量在定义时就已分配了内存单元, 外部变量定义可作初始赋值,外部变量说明不能再赋初始值, 只是表明在函数内要使用某外部变量。

外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变是是从它的作用域提出的,外部变量从它的存储方式提出的,表示了它的生存期。
当一个源程序由若干个源文件组成时, 在一个源文件中定义的外部变量在其它的源文件中也有效

静态变量的类型说明符是static。静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量.

静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。当下标不为整数时将自动取整。
只能给元素逐个赋值,不能给数组整体赋值。
二维数组可按行分段赋值,也可按行连续赋值。 例如对数组a[5][3]:
初始化赋值的一般形式为: static 类型说明符 数组名[常量表达式]={值,值……值}; //?
C语言允许分解二维数组a[3][4],可分解为三个一维数组,其数组名分别为a[0],a[1],a[2]。
C语言允许用字符串的方式对数组作初始化赋值。sratic char c[]="C program";<br />当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。为了避免这种情况, 可多设几个字符数组分段存放含空格的串。<br />用于输入输出的字符串函数, 在使用前应包含头文件"stdio.h" ; 使用其它字符串函数则应包含头文件"string.h"。 
gets函数并不以空格作为字符串输入结束的标志, 而只以回车作为输入结束。这是与scanf函数不同的。
求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用,由于Turbo C现定是自右至左求值,因此,对于
int i=8;printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);结果为8,7,7,8。

对被调函数的说明也有两种格式,一种为传统格式:int func();另一种现代格式的括号内给出了形参的类型和形参名, 或只给出形参类型:int func(int,int);
C语言中又规定如果被调函数的返回值是整型或字符型时, 可以不对被调函数作说明,
形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度

只有局部自动变量和形式参数才可以定义为寄存器变量。因为寄存器变量属于动态存储方式。
在Turbo C,MS C等微机上使用的C语言中, 实际上是把寄存器变量当成自动变量处理的。因此速度并不能提高。
在一个源文件的函数中调用其它源文件中定义的外部函数时,应 用extern说明被调函数为外部函数。
因为数组或函数都是连续存放的。

main函数中,argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。

而如果通过指向指针的指针变量来访问变量则构成了二级或多级间访。在C语言程序中,对间访的级数并未明确限制, 但是间访级数太多时不容易理解解,也容易出错,因此,一般很少超过二级间访。

从标识符开始,先看它右边有无方括号或园括号,如有则先作出解释,再看左边有无*号。

C系统在处理字符文件和二进制文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。

C中文件处理:fopen()状态
1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2. 凡用“r”打开一个文件时,该文件必须已经存在, 且只能从该文件读出。
3. 用“w”打开的文件只能向该文件写入。 若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。 5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:
6. 把一个文本文件读入内存时,要将ASCII码转换成二进制码, 而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。

在ANSI C标准中允许用结构变量作函数参数进行整体传送。 传送时逐个复制

0 0
原创粉丝点击