1.C语言中定义数组的形式为:类型符 数组名[常量表达式],常量表达式中可以包括常量和符号常量,如“int a[3+5];”是合法的。不能包含变量,如“int a[n];”是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非常量表达式。如:
void func(int n){ int a[2 * n]; //合法,n的值从实参传来 . . .}
在调用 func 函数时,形参n从实参得到值。这种情况称为“可变长数组”,允许在每次调用func函数时,n有不同的值。但是在执行函数时,n的值是不变的,数组长度是固定的。如果指定数组为静态存储方式,则不能用“可变长数组”。如:static int a[2 * n];是不合法的。
如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被“初始化列表”指定初始化的数组元素,系统会自动把它们初始化为0,如果是字符型数组,则初始化为'\0',如果是指针型数组,则初始化为NULL,即空指针。
字符数组初始化方式:
char c[] = {"I am happy"};等同于char c[] = "I am happy";此时数组c的长度不是10,而是11。因为字符串常量的最后由系统加上一个'\0'。上面的初始化与下面的初始化等价。char c[] = {'I',' ','a','m',' ','h','a','p','p','y','\0'};而不与下面的等价:char c[] = {'I',' ','a','m',' ','h','a','p','p','y'};使用printf输出字符数组时如果采用%s的输出方式,遇到'\0'就停止输出。
字符串处理函数的头文件为string.h
2.strlen函数--测字符串长度的函数,函数值为字符串中的实际长度(不包括'\0'在内)。
3.字符数组赋值只能采用strcpy的方式,字符串比较采用strcmp(比较字典序,小写字母大于大写字母)
4.strlwr函数--转换为小写的函数
5.strupr函数--转换为大写的函数
6.所有函数都是平行的,即函数不能嵌套定义。函数间可以相互调用,但不能调用main函数。main函数是被操作系统调用的。实参向形参的数据传递是“值传递”,单向传递,只能由实参传给形参,而不能由形参传给实参。实参和形参在内存中有不同的存储单元,实参无法得到形参的值。
在函数声明中,形参名可写可不写。编译系统只关心和检查参数个数和参数类型,而不检查参数名,因为在调用函数时只要求保证实参类型与形参类型一致,而不必考虑形参名是什么。