1. 数组优点:
(1)C语言数组下标在一个很低的层次上处理,但在程序运行时无法知道数组大小及 其下标是否有效。
(2)数组出现在表达式时和指向数组中第一个指针等价(指针比使用数组下标快2倍)。
数组作为参数传递给函数等价于指向数组中第一个元素的指针。数组作为参数传递给函 数时采用:值传递与地址传递。
2. 字符数组的收入输出
方法:逐个字符输入输出。用格式符“%c”输入或输出一个字符;将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。
3. 字符串处理函数:
(1)puts:将一个字符串(以′\0′结束的字符序列)输出到终端。形式:puts (字符数
组)
(2)gets:从终端输入一个字符串到字符数组,并且得到一个函数值。形式:gets(字符数组)
(3)strcat:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。形式:strcat(字符数组1,字符数组2)
(4)strcpy:是将字符串2复制到字符数组1中去。形式strcpy(字符数组1,字符串2)
(5)strcmp:比较字符串1和字符串2。形式:strcmp(字符串1,字符串2)
(6)strlen:测试字符串长度的函数。形式: strlen (字符数组)
(7)strlwr:将字符串中大写字母换成小写字母。形式:strlwr (字符串)
(8)strupr:将字符串中小写字母换成大写字母。形式:strupr (字符串)
4. strcpy注意点:(1)字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组 1的长度不应小于字符串2的长度。
(2)字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,也可以是一个字符串常量。
(3)复制时连同字符串后面的′\0′一起复制到字符数组1中。
(4)可以用strncpy函数将字符串2中前面若干个字符复制到字符数组1中去。
(5)不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。用strcpy函数只能将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。
5. 数组常见问题:a.数组下标总是从0开始的吗?
是的,对数组a[MAX]来说,其第一个和最后一个元素分别是a[0]和a[MAX-1]。
注:a[MAx]是一个有效的地址,但该地址中的值并不是数组a的一个元素。
b.可以使用数组后第一个元素的地址吗?
可以使用,但不可以查看该地址中的值。
c.为何要小心对待位于数组后的那些元素的地址?
在一些计算机上,地址由两部分组成:1.一个指向某块内存的起始点的指针;2.相对于这块内存的起始点的地址偏移量。这种地址结构被称为段地址结构,子程序的调用 就是通过在栈指针上加上一个地址偏移量来实现。
6. 实参与形参区别:
形式参数:定义函数时函数名后面括号中的变量名
实际参数:调用函数时函数名后面括号中的表达式
7.值传递和地址传递:
值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形
参单元被释放,实参单元仍保留并维持原值。
特点:形参与实参占用不同的内存单元;单向传递。
地址传递方式:函数调用时,将数据的存储地址作为参数传递给形参。
特点:形参与实参占用同样的存储单元;“双向”传递;
实参和形参必须是地址常量或变量。
8.函数调用的形式:(1)作为函数语句调用。函数一般无返回值;
(2)作为函数表达式调用;
(3)作为函数参数调用。
9. 结构体数组做函数参数:包含两类情况:结构体数组元素作为实参和结构体数组名作为。实参。两类情况仍然服从数据的单向值传递原则,但前者传给形参的是某些变量的值,后者传给形参的是结构体数组的首地址。
10.什么是回调函数?
回调函数是一个通过函数指针调用的函数。若把函数指针传递给另一个函数,当这个函数指针被用来调用其所指向的函数时,即为回调函数。