问题
单项选择题
若有以下程序段: #include <iostream> using namespace std; int main () {int a[]={1,4,5};int *p=&a[0],x=6, y,z;for (y=0; y<3; y++) z= ( (* (p+y) <x) *(p+y) :x);cout<<z<<end1;return 0; } 程序运行后的输出结果是( )。
A.1
B.4
C.5
D.2
答案
参考答案:C
解析: 本题考核指针的运算。程序首先定义了一整型数组a,并赋初值1,4,5。即a[0],a[1]和a[2]的值分别为1,4和5。程序还定义了一个整型指针p,并将其初始化且指向数组元素a[0]。在for循环语句中,赋值语句“z=((*(p+y)<x)*(p+y):x);”可等价为“z=(a[y]<x)a[y]:x”。因为表达式中的“*(p+y)=p[y]=a[y]”。for语句每循环一次,就给变量z重新赋值一次,z的值其实就是数组和x相比较,将数组a中的最大值赋给z。当y=2后,退出循环,输出结果是5。