3个c++选择题

15) 以下程序的输出结果是:
Void main()
{char w『』『10』={“ABCD”,”EFGH”,”IJKL”,”MNOP”},k;
For(k=1;k<3;k++)
Cout<<w『k』<<endl;
}
A. ABCD B.ABCD C.EFG D.EFGH
FGH EFG JK IJKL
KL IJ O
M
25) 若有以下语句且0<=k<6,则正确表示数组元素地址的表达式的是:(C)
int x[]={1,3,5,7,9,11},*ptr=x,k;
A.x++ B.&ptr C.&ptr[k] D.&(x+1)
cout<<x++;//error
33) 以下程序的执行结果是:(A)
int f(int i) {return ++i;}
int g(int &i) {return ++i;}
void main()
{int a(0),b (0);
a+=f(g(a));
b+=f(f(b));
cout<<a<<”\t”<<b;
}
A.3 2 B.2 3 C 3 3 D 2 2

分题号解释清楚,说的细一些,谢谢了。
第一题的选项是这样的
A. ABCD B. ABCD C. EFG D. EFGH
FGH EFG JK IJKL
KL O
M

15.D
应该输出:
EFGH
IJKL

k可以取值1,2,对于二维数组来说:
w[n]是指向第n行的行首元素的地址,
所以w[1],w[2]分别指向w的第一行(“EFGH”)的首地址和第二行(“IJKL”)的首地址,
所以输出:
EFGH
IJKL

25.C
*ptr=x,所以&ptr[k]也就是&x[k]。

33.A
这个区别在于传址和传值。
g(int &i) 是传址的,所以执行g(a)后,不但返回值为1,执行完毕后,main() 函数中a的值也变为1,
在执行f(g(a)),也就是f(1)后,返回值为2,
在执行+=操作时,其实执行的是a=a+f(1)=1+2=3

f(b)是传值的,所以执行f(b)后,返回值为1,执行完毕后,main() 函数中b的值不变,还为0,
在执行f(f(b))),也就是f(1)后,返回值为2
在执行+=操作时,其实执行的是b=b+f(1)=0+2=2
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-01-01
1.D 数组W补全应该是[4][10],w[1]就是EFGH ,w[2]就是IJKL
2.C x++即x=x+1,x是数组名,作指针用时是常量指针,不能被赋值;ptr本来就是指针,不用取地址;&ptr[k]表示第k个元素的地址;x+1同样本身就是地址
3.A int g(int &i) {return ++i;} 注意这里的i是引用,所以会改变主函数中对应实参的值
相似回答