有以下程序:
#include 〈iostream〉
using namespace std;
#define M 10
#define B4
void setstar(char *a, int n)
int i;
for (i=0; i
void arrout(char *a, int n)
int i;
for (i=0; i
int main ()
char c[]=’A’, ’B’, ’C’, ’D’, ’E’, ’F’, ’G’, ’H’, ’I’, ’J’;
setstar(&c[4],M-B) ;
arrout(c,M);
return 0;
A.AB C D E F G H I J
B.AB C D * * * * * *
C.AB C D E F * * * *
D.* * * * * * A B C D
参考答案:B
解析: 本题考查对指针作为函数形参的掌握程度。根据程序代码逐步分析:
①第一个被调函数setstar()为void型。形参为一个char类型的指针变量a和一个整型变量n,函数体由for循环语句构成,给指针变量a所指的变量赋值,并对从a所指的存储单元开始的连续n个存储单元,进行赋值(*)。
②函数arrout()也是void类型,形参也是两个,一个为char类型的指针,另一个是整型变量n。函数体也是由for循环语句构成,不过setstar()函数是给指针变量所指的存储单元赋值,:而arrout()函数是输出指针变量所指的存储单元中的值。
③主函数中,程序首先定义并赋初值于数组c,调用setstar()函数,把实参数组元素c[4]的地址传递给setstar的形参变量a,并把M-B的值(即6)传递给n。这样最后的结果是数组元素c[0]、c[1]、c[2]和c[3]中的值不变,从c[4]开始以后的数组元素中的值都将被改变为字符’*’。调用函数arrout()输出改变后的数组c中的值。