组。注意*p两侧的括号必不可少,如果写成*p[4],由于方括号[]运算级别高,因此p先于[4]结合,p[4]是定义数组的形式,然后再与前面的*结合,*p[4]就是指针数组,这两者有本质上的区别,要注意区别,在写程序的时候不要出错; 14.程序中,把score[0][0]的地址传给p,使p指向score[0][0],然后再average函数中,使p先后指向二维数组的各个元素,p每增加1就改为指向score数组的下一个元素,形参n代表需要求平均值的元素的个数;p_end代表的是最后一个元素的地址;
15.该程序中,实参score和形参p的类型是相同的,在调用search函数时,p得到实参score的值,即score[0]的起始地址,也就是说p指向score数组的第一行,然后p先后指向各行; 16.用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,也可以通过数组名和格式声明%s输出该字符串;注意:由于在初始化时字符的个数是确定的,因此可以不必指定数组的长度,用数组名string和输出格式%s可以输出整个字符串;
17.对字符指针变量的初始化,实际上是把字符串第一个元素的地址(即存放字符串的字符数组的首元素地址)赋给指针变量string,使string指向字符串的第一个字符;
18.该程序中,可以通过地址访问其数组的元素;
19.由于可以用指针变量访问字符串,因此可以通过改变指针变量的值使它指向字符串中的不同字符;定义两个指针变量,改变指针变量的值,使它们顺序指向数组中的各元素,进行对应元素的复制;
20.可以定义一个函数copy_string用来实现字符串的复制功能,在主函数中调用此函数,函数的形参和实参可以分别用字符数组名或字符指针变量;
21.指针变量a的值是可以变化的,printf函数输出字符串时,从指针变量a当时所指向的元素开始,逐个输出各个字符,知道遇到‘\\0’为止,而数组名虽然代表地址,但它是常量,它的值是不能改变的,这点要注意;
22.可以定义一个指向函数的指针变量,用来存放某一函数的起始地址; 23.在程序中,调用函数的语句是“c=(*p)(a,b)”,这样使用了指向函数的指针变量;
24.在该程序中,只用到了f1和f2函数,完全可以在fun函数中直接调用这两个函数,不用定义指针变量,但是如果在每次调用fun函数时,要调用的函数时不固定的,这时,使用指针变量就比较方便了。只要在每次调用fun函数的时候给出不同的函数名作为实参即可,fun函数不必做任何修改;这是一种符合结构化程序设计方法原则的方法,要注意掌握;
25.该函数的返回值是&score[k][0](即存放序号为k的学生序号为0的课程的数组元素的地址),然后在主函数中输出该生的全部成绩;
26.在该程序中,main函数不止调用一次search函数,在search函数中检查3个学生有无不及格的课程,如果有,就返回该学生的0号课程的地址&score[i][0],否则返回NULL;
27.该程序中要注意的是:用选择法排序,但是不移动字符串,而是改变指针数组的各元素指向;
28.定义一个指针数组name,并对它初始化,使name数组中每一个元素分别指向5个字符串,定义一个指针型数据的指针变量p,使p先后指向name数组中各个
11
29.注意:指针数组的元素只能存放地址,不能存放整数;
30.用malloc函数开辟一个动态自由区域,用来存5个学生的成绩,会得到这个动态区域第一个字节的地址,它的基类型是void型,用一个基类型为int的指针变量p来指向动态数组的各元素,并输出它们的值,但要注意:必须先把malloc函数返回的void指针转换为整型指针,然后赋给p1;
12