参考答案和解析
C 解析:表达式p++->n相当于先取p->n的值(即a[0].n),再p++(指针后移指向元素a[1]):表达式p->n++相当于先取p->n的值(即a[0].n),再将p->n的值(即a[0].n的值)加1;表达式++p->n先将p->n的值加1(即a[0].n的值加1),可见,它的值应该是6。选项D和选项B一样。
更多“如有下面的语句说明, 则表达式 *(p+3) 的值是 ()。 int a[]={2,3,4,5,6,7}; int *p=a;”相关问题
  • 第1题:

    ( 6 )若有定义语句: int a=3,b=2,c=1;, 则表达式 a<b?a:b 的值是 ___________ 。


    正确答案:

  • 第2题:

    若已有定义int x;下列说明指针变量p指向x的正确语句是( )

    A. int p=&x;

    B. int *p=&x;

    C. int p=x;

    D. int *p=x;


    正确答案:B

  • 第3题:

    有如下定义语句:int a[]={1,2,3,4,5);,则对语句int *p=a;正确的描述是( )。

    A.语句int *p=a;定义不正确

    B.语句int *p=a;初始化变量p,使其指向数组对象a的第一个元素

    C.语句int *p=a;是把a[0]的值赋给变量p

    D.语句int *p=a;是把a[1]的值赋给变量p


    正确答案:B

  • 第4题:

    若有以下说明和语句: struct st{int n;char*ch;} struct st a[3]={5,"abc"7,"def",9",ghk"),*p=a; 则值为6的表达式是______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.#NAME?


    正确答案:D
    解析:根据结构变量的存储特点,p+l意味着增加地址值为结构体数组a的—个元素所占的字节数,即P++使p由a[0]指向a[1]起始地址。本题++p->n得到p指向的结构体变量中成员n的值使之加1。因为p指向数组a起始地址,p->n的值为5,再执行自加l运行,结果为6。

  • 第5题:

    设有以下C语言说明语句,则值为210的表达式是(33)。 struct s { int a;int *b;}; Int x0[]={110,120},x1[]={210,220}; struct s x[]={{100},{200}},*p=x; x[0].b=x0;x[1].b=x1;

    A.(++p)->a

    B.*p->b

    C.*(p++)->b

    D.*(++p)->b


    正确答案:D
    解析:注意到本试题中x为结构体数组,则数组名x代表数组首地址。x[0]、x[1]代表结构体数组元素。对于指向结构体数组的指针变量p,每次“+1”则指向下一个结构体数组元素。本题中++p后,由x[0]改指向x[1]。结构体数组x在定义时赋初值,但未对结构体成员b赋初值。语句“x[0].b=x0;x[1].b=x1;”的作用是对结构体数组x的成员b赋初值。对于选项A,(++p)->a等价于x[1].a==200。选项B,*p->b等价于*(x->b)==*x0==110。选项C,*(p++)->b等价于*(x[0].b)==110=x0[0]。选项D,*(++p)->b等价于*(x[1].b)==210=x1[0]。注意,在测试以上1个选项的输出值时,不能放在同一个printf函数中进行输出。因为函数中的参数运算顺序在C语言中是自右向左进行的,而p的值又是不断变化的,所以相互之间会产生影响。

  • 第6题:

    设有定义语句“int a=10,*p=&a;”,则表达式“a十*p”的值是( )

    A.10

    B.20

    C.100

    D.语法出错


    正确答案:B
    在数据定义语句中的“*p=&a”,表示指针变量p已经指向变量a,所以表达式中的“*p”就是变量a,“a+*p”就是“a+a”,所以该表达式的值为20。本题答案应选B。

  • 第7题:

    若有以下说明和语句: int c[4][5],(*p)[5]; p=c; 能够正确引用c数组元素的是( )。

    A.p+l

    B.*(p+3)

    C.*(p+1)+3

    D.*(p[0]+2)


    正确答案:D
    解析:本题中定义了一个二维数组c和一个指针数组p,并初始化让p指向c。显然此时p中的各元素为地址,选项A中p+1,此时其中的1代表的长度是整个二维数组c的长度,故p+l将让p指向c数组后面的元素,不能引用c数组中的成员,故选项A错误;同理选项B和选项C都不正确,选项D中p[0]指的是指针数组中的第一个元素的地址即c的首地址,此时的1的长度代表的是数组C中一行的长度,故p[0]+2代表的是第3行的首地址,而*(p[0]+2)将代表第3行的第一个元素的地址,所以,4个选项中选项D符合题意。

  • 第8题:

    设有说明语句int k,i=5,j=10;则表达式k=(++i)*(j--)的值是 ( )

    A.50

    B.60

    C.45

    D.55


    正确答案:B
    本题考查自加和自减运算符的运用。表达式++i的值为6,j——的值为10,故 k=6×10=60。

  • 第9题:

    在说明语句int a(5),&b=a,*p=&a;中,b的值与a的值是相等的。


    正确答案:正确

  • 第10题:

    若有C语句int k=5;float x=1.2;,则表达式(int)(x+k) 的值是()

    • A、5
    • B、6.2
    • C、7
    • D、6

    正确答案:D

  • 第11题:

    若有语句:int x=6,*p=&x;则下面正确的表达式是()

    • A、++&x
    • B、(*p)--
    • C、&(x+5)
    • D、p=1000

    正确答案:B

  • 第12题:

    单选题
    有说明语句int *p=new int[10];释放动态数组的正确语句是()
    A

    delete []p;

    B

    delete p[]

    C

    delete int[]p

    D

    delete p int[10]


    正确答案: D
    解析: 暂无解析

  • 第13题:

    若有定义语句int b=2;,则表达式(b<<2)/(3||b)的值是( )。A.4B.8C.0D.2

    若有定义语句int b=2;,则表达式(b<<2)/(3||b)的值是( )。

    A.4

    B.8

    C.0

    D.2


    正确答案:B
    2的二进制数为010,移两位后的二进制数为01000,转成十制数为8,(3||2)为真即1,8/ 1=8,所以结果为8。

  • 第14题:

    有如下定义语句:int a[]={1,2,3,4,5};,则对语句int*p=a;正确的描述是( )。

    A.语句int*p=a;定义不正确

    B.语句int*p=a;初始化变量p,使其指向数组对象a的第一个元素

    C.语句int*p=a;是把a[0]的值赋给变量p

    D.语句iht*p=a;是把a[l]的值赋给变量p


    正确答案:B

  • 第15题:

    下面的语句中错误的是

    A.int a=5;int x[a] ;

    B.const int a=5;int x[a] ;

    C.int n=5;int * p=new int[a] ;

    D.const int n=5;int * p=new int[a] ;


    正确答案:A
    解析:在C++中定义数组时,数组的范围参数在静态定义时必须是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了值的参数。故选项A) 是错误的定义方法。

  • 第16题:

    设有定义语句“int x=10, *p=&x”,则表达式的值为10的有( )。

    A、p

    B、*p

    C、*&x

    D、*p=x

    E、x=*p


    参考答案BCDE

  • 第17题:

    若有说明语句:int x=3,y=4,z=5;,则下面的表达式中,值为0的是______。

    A.x&&y

    B.x<=y

    C.x||++y&&y-z

    D.!(x<y&&!z||1)


    正确答案:D
    解析:x&&y值为1,x=y值为1,x||++y&&y-z值为1,!(xy&&!z||1=值为0。

  • 第18题:

    设有定义语句“int a[]={2, 4,6,8,10},*p=s;”,则值为8的表达式是( )

    A.*p+3

    B.*p+4

    C.*(p+4)

    D.*(s+3)


    正确答案:D
    分析四个备选答案,可以看出是用指针法来引用数组a的元素。当指针变量p已经指向数组。的首地址后(正如本题那样),*(p+i)和*(s+i)都是数组元素a[i]。对于备选答案A:*p就是数组元素。a[0],其值为2,再加3结果为5,不符合题意。同样道理,备选答案B中的*p十4的值为6,也不符合题意。对于备选答案C:*(p+4)代表数组元素a[4],其值为10,也不符合题意。显然本题答案应选D。因为*(s+3)就是数组元素s[3],其值为8。

  • 第19题:

    若有定义语句:int a=3,b=2,c=1;,则表达式a<b?a:b的值是【 】。


    正确答案:2
    2 解析:本题考查的知识点是:条件运算符。条件运算是C++中唯一的三目运算,与其对应的运算符?:称为条件运算符。条件运算符的使用格式为:
    表达式1>?表达式2>:表达式3>
    当计算有条件运算符构成的表达式时,首先计算表达式1>,若其值非0,则计算出 表达式2>的值,并用这个值作为整个表达式的值;若表达式1>的值为0,则计算出表达式3>的值,并用这个值作为整个表达式的值。题目中,ab的结果为假(即 0),所以整个表达式的值为b的值2。

  • 第20题:

    若有语句:int x,*p=&x;则与该语句等价的语句是()

    • A、intx,*p;*p=&x;
    • B、int x,*p;p=&x;
    • C、int x,*p;*p=x;
    • D、int x,*p;p=x

    正确答案:B

  • 第21题:

    有说明语句int *p=new int[10];访问动态数组元素的正确语句是()

    • A、int a=p;
    • B、int a=*p;
    • C、delete int[]p
    • D、delete p int[10]

    正确答案:C

  • 第22题:

    若已定义   struct num{    int a;    int b;   float f;  } n={1,3,5.0};  struct num *p=&n;  则表达式p->b/n.a*++p->b的值是  ①  ,表达式(*p).a+p->f的值是  ②  。


    正确答案: ①12
    ②6.0

  • 第23题:

    问答题
    若已定义   struct num{    int a;    int b;   float f;  } n={1,3,5.0};  struct num *p=&n;  则表达式p->b/n.a*++p->b的值是  ①  ,表达式(*p).a+p->f的值是  ②  。

    正确答案: ①12
    ②6.0
    解析: 暂无解析

  • 第24题:

    单选题
    有说明语句int *p=new int[10];访问动态数组元素的正确语句是()
    A

    int a=p;

    B

    int a=*p;

    C

    delete int[]p

    D

    delete p int[10]


    正确答案: D
    解析: 暂无解析