阅读以下说明和C代码,回答下面问题,将解答写在对应栏内。
[说明1]
下面代码的设计意图是:将保存在文本文件data.txt中的一系列整数(不超过100个)读取出来存入数组arr[],然后调用函数sort()对数组arr的元素进行排序,最后在显示屏输出数组arr的内容。
[C代码]
若分别采用函数定义方式1、2和调用方式1、2,请分析程序的运行情况,填充下面的空。
若采用定义方式1和调用方式1,则输出为“00000000”。
若采用定义方式1和调用方式2,则______。
若采用定义方式2和调用方式1,则______。
若采用定义方式2和调用方式2,则______。
参考答案:出错 山错 输出“testing”
解析:第一题中fp为文件打开后的指针,因此在定义时应定义为“FILE *fp”。14行错误。fscanf函数的格式为int fscanf(FILE *strearn,char *format,<address-list>),因此第19行程序错误,fscanf函数中第三个参数应该是个地址值。应改为“fscanf(fp,"%d",&arr[num++]);”。在参数传递时,sort函数的形参是数组地址,因此,在main函数中的实参应该也是数组地址arr,21行错误,应改为“sort(arr,num);”。
第二题考查的是指针变量的定义。定义方式1中p是一个指向字符型变量的指针。从而定义方式1中给p赋值一个新创建的字符串,同时将“testing”复制给该字符串。即p指向“testing”字符串。而在定义方式2中,p是一个指向字符型变量指针的指针,即p指向一个指针而该指针又指向一个字符型变量。*p这个指针所指内容与定义方式1中p指针所指内容一致,而p这个指针指向*p这个指针。而在调用过程中,get str(ptr)传递的是指针,get_str(&ptr)传递的是指针的地址。因此,只能用定义方式1调用调用方式1,定义方式2调用调用方式2,否则,由丁训用参数类型不匹配,出现错误。当采用定义方式2和调用方式2时,参数传递ptr指针的地址。指向ptr指针的指针所指内容中复制testing字符串,即ptr指针单元中放的是testing,当测试ptr时为空,执行else语句。输出ptr指针单元中存放的内容testing。