问题
问答题
阅读以下两个说明、C函数和问题,将解答写入答题纸的对应栏内。
【说明1】函数main()的功能旨在对输入的一个正整数n,计算12+22+32+…+n2,但是对该函数进行测试后没有得到期望的结果。【C函数1】
1.输入5测试上述mam函数时,显示结果如下所示。
2.将行号为7的代码修改为:printf("n=%d\nresult:%d\n",n,sum);并再次输入5测试mam函数,显示结果如下所示。
请指出可能导致函数f2_B运行异常的表达式。
答案
参考答案:
(1)str++(2)*str='a'
解析:
函数test_f2()编译时系统报告有错,检查其函数体,其中的charstr[]="teststring";表明str是一位数组名,因此,*str表示str[0],通过*str='a';为str[0]赋值显然是允许的。出错的地方是str++,在C语言中,数组名是指针(地址)常量,是不允许修改的,str++试图修改指针常量str,因此编译时会报告错误。若将str修改为指针变量,即在函数f2_B()中定义为char*str="teststring",则可以通过str++修改str的值,使得str可以指向不同的字符对象。使某些C系统执行f2_B()时发生异常的表达式是*str='a',该表达式要修改str所指对象的值,而定义char*str="teststring"则令str指向了一个字符串常量,由于此常量在运行过程中不可修改,因此试图通过指针str修改常量的动作导致了异常。