参考答案和解析
主谓主谓双宾主谓宾主谓宾宾补主系表
更多“已知 int i,a[5],*p,判断下列语句哪个是非法的()”相关问题
  • 第1题:

    若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是( )。

    Stmct stu

    { int i;

    int name;

    }st,*p;

    p=&st;

    A.st.i

    B.*p.i

    C.(*p).i

    D.p->i


    正确答案:B
    解析:本题主要考查结构指针:p=&st,访问结构体的成员,可以通过结构变量访问,即st.i,也可以用等价的指针形式即(*p).i和p->i。

  • 第2题:

    下列语句中不是死循环的是( )。A.int i=10;B.for(int i=1;j<10;i++) while(1) { { i--; i--; }

    下列语句中不是死循环的是( )。

    A.int i=10;

    B.for(int i=1;j<10;i++) while(1) { { i--; i--; } if(i==1)break;

    C.int i-0;

    D.int i=1:


    正确答案:A
    选项A中i自减到1时就会执行break语句跳出循环,选项B中i<10永远成立不会跳出循环.选项C中第一次进入循环体后i>0永远不会跳出循环,选项D中未给出结束循环的条件。

  • 第3题:

    类MyClass的定义如下: class MyClass { public: MyClass(){value=0;} SetVariable(int i){value=i} private: int value; }; 则对下列语句序列正确的描述是( )。 MyClass*P,my;p=&my;

    A.语句p=&my;是把对象my赋值给指针变量P

    B.语句MyClass*p,my;会调用两次类MyClass的构造函数

    C.对语句*P.SetVariabte(5)的调用是正确的

    D.语句p->SetVariable(5)与语句my.SetVariable(5)等价


    正确答案:D
    解析: 语句p=&my,是把对象my的地址值赋值给指针变量P;语句MyClass*p,my;,由于p只是一个指向对象的指针,因此定义指针p不调用构造函数,所以此语句只调用一次构造函数;讨成员函数的引用可以通过两种形式:指针->成员函数(形参表)或者对象名、成语函数名(形参表)。

  • 第4题:

    类MyClas定义如下: Class MyClas{ public: MyClas(){value=0;} setVariable(int i){value=I;} private: int value; }则以下对语句序列 MyClas *p,my;p=&my; 的描述正确的是( )。

    A.语句 p->setVariable(5) 与语句 my.setVariable(5) 等价

    B.对语句 *p.setVariable(5)的调用是正确的

    C.语句 MyClas *p,my; 会调用两次类MyClas的构造函数

    D.语句 p=&my; 是把对象my赋值给指针变量p


    正确答案:A
    解析:选项A中,p是对象指针,所以调用p的成员要用符号“->”,而my是一般的类对象,所以调用my的成员用“.”;选项B中正确的调用方式应该是(*p).setVariable;选项C中仅调用一次类对象的构造函数;选项D是把对象my的地址赋值给指针变量p,而不是对象本身。

  • 第5题:

    若有说明int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是 ( )

    A.i=*p;

    B.*p=*&j

    C.i=&j

    D.i=* *p;


    正确答案:B

  • 第6题:

    类MyClass的定义如下: class MyClass { public: MyClass(){value=0;} SetVariable(int i){value=i;) private: int value; }; 则对下列语句序列正确的描述是( )。

    A.MyClass*p,my;p=&my;

    B.语句p=&my;是把对象my赋值给指针变量p

    C.语句MyClass*p,my;会调用两次类MyClass的构造函数

    D.对语句*p.SetV ariable(5)与语句my.SetVariable(5)等价


    正确答案:D

  • 第7题:

    经过下面的语句定义后:int i,a[10],*p;下列语句中,合法的是______。

    A.p=100;

    B.p=a[5];

    C.p=a[2]+2;

    D.p=a+2;


    正确答案:D

  • 第8题:

    已知:int n=10;那么下列语句中错误的是

    A.int*p=new long[n];

    B.int p[n];

    C.int*p=new long(n);

    D.int p[10];


    正确答案:B
    解析:本题考核指针、数组和new运算符。运算符new用于动态申请存储空间,它的操作数为某种数据类型且可以带有初值表达式或元素个数,若带初值,则其表达式为:指针>=new类型>(初值),如C选项所示,若带有元素个数,则其语法格式为:指针>=new类型>[元素个数>],如A选项所示。数组定义中数组大小必须为常量,而B选项中的n为一变量所以是错误的。

  • 第9题:

    下列语句中正确的是()。A.int * p;i=8; p=&i;B.int * p,i; p=&i;C.float * p;int i;p=&am

    下列语句中正确的是( )。

    A.int * p;i=8; p=&i;

    B.int * p,i; p=&i;

    C.float * p;int i;p=&(float)i;

    D.float * p;cout<<* p;


    正确答案:B
    解析:选项A中的变量i没有定义就使用了;选项C(float)i把i中的数据取出后变为float型,就是一个数值,“&(float)i”不能得到i的地址;选项D中的指针变量,p没有赋值就使用,它到底指向哪个存储单元没有指明,它可能指向不可读取的存储单元,这时的破坏性很大。

  • 第10题:

    有以下语句:int a[10]={0,1,2,3,4,5,6,7,8,9}, *p=a;。下列对a数组元素的引用 (其中0≤i<10)不正确的是( )。

    A.a[p-a]

    B.P[i]

    C.*(&a[i])

    D.*( *(a+i))


    正确答案:D
    解析:选项A中,p为指针,数组名a代表数组的首地址,所以p-a就是指针到数组首地址的偏移量。选项B中,p[i]等价于a[i]。选项C中,&a[i]是取数组a中第i个元素的地址,而对于*(&a[i]),由指针运算符“*”的运算规则可知,语句*(&a[i])就是返回地址&a[i]中存敢的值,即a[i]。选项D是以指针形式对数组元素进行引用,由于a代表数组的首地址,所以a引代表第i+1个元素的地址,*(a+i)就是该数组元素的值,再对这个值作取内容操作是非法的,所以选项D是错误的。

  • 第11题:

    假设有以下定义:int a[5]={1,2,3,4,5},i=3,*p=a , *q=a; 则不能正确执行的语句是()

    • A、i=*p +*q;
    • B、 a=i;
    • C、*p = *(a+i);
    • D、i = *p**(q+2);

    正确答案:B

  • 第12题:

    int i,*p=&i;是正确的C说明语句.


    正确答案:正确

  • 第13题:

    若有定义语句:"int a[4][10],*P,*q[4];"且0≤i<4,则错误的赋值是( )。A.D=aB.q[i]=a[i]C.p=a[l]D.

    若有定义语句:"int a[4][10],*P,*q[4];"且0≤i<4,则错误的赋值是( )。

    A.D=a

    B.q[i]=a[i]

    C.p=a[l]

    D.P=&a[2][1]


    正确答案:A
    数组名是一个存放一个数组首地址的值,是一个地址常量。而p=a不是合法的,因为p和a的基本类型不同。

  • 第14题:

    类MyClass的定义如下: class MyClass { public: MyClass(){value=0;} SetVariable(int i){value=i;} private: int value; }; 则对下列语句序列正确的描述是( )。

    A.语句p=&my,是把对象:my赋值给指针变量p

    B.语句MyClass*p,my;会调用两次类MyClass的构造函数

    C.对语句*P.SetVariable(5)的调用是正确的

    D.语句P->SetVariable(5)与语句my.SetVariable(5)等价


    正确答案:D
    解析: 选项A,语句p=&my;是把对象my的地址值赋值给指针变量P;选项B,语句MyClass*p,my;由于 p只是一个指向对象的指针,因此定义指针p不调用构造函数,所以此语句只调用一次构造函数:对成员函数的引用可以通过两种形式:指针->成员函数(形参表)或者对象名。成语函数名(形参表),故选项C错误,选项D正确。

  • 第15题:

    下列哪个初始化是非法的(下面五个选项是顺序出现的声明语句)()

    A、inti=-1;

    B、constintic=i;

    C、constint*pc=

    D、int*constcpi=

    E、constint*constcpic=


    参考答案:C

  • 第16题:

    程序中有如下语句

    for(int i=0;i<5;1++)cout<<*(p+i)<<",";

    能够依次输出int型一维数组DATA的前5个元素。由此可知,变量p的定义及初始化语句是【 】。


    正确答案:int*p=DATA;
    int*p=DATA; 解析:本题考查的是指针变量的定义及初始化。本题的for循环中,循环变量i取值范围是0~4,故输出的5个表达式为从*(p+0)到*(p+4),而题目要求输出int型一维数组DATA的前5个元素。由此可知,变量p是一个指向数组DATA首地址的 int型指针,故它的定义及初始化语句是int*p=DATA;。

  • 第17题:

    程序中有如下语句for(int i=0;i<5;i++)cout<<*(p+i<<“,”;能够依次输出int型一维数组a的前5个元素。由此可知,变量P的定义及初始化语句是( )。

    A.int*p=a;

    B.int p=a;

    C.*p=a;

    D.p=a;


    正确答案:A
    解析: 从循环语句中可以看出,是在0到4的循环中输出数组a中的前5个元素,输出的值为*(p+i),即为指针p向后移动指向的元素。所以初始化要将指针p指向数组a,即int*p=a;。

  • 第18题:

    程序中有语句:for(inti=0;i<5;i++)cout<<*(p+i)<<",";能够依次输出int型一维数组a的前5个元素。由此可知,变量P的定义及初始化语句是( )。

    A.int*p=a;

    B.intp=a;

    C."p=a;

    D.p=a;


    正确答案:A
    A。【解析】从循环语句中可以看出,是在0到4的循环中输出数组a中的前5个元素,输出的值为*(P+i),即为指针P向后移动指向的元素。所以初始化要将指针P指向数组a,即int*p=a;。

  • 第19题:

    已知:intn=10;那么下列语句中错误的是

    A.int*p=new long[n];

    B.int p[n];

    C.int*p=new long(n);

    D.int p[10];


    正确答案:B
    解析:本题考核指针、数组和new运算符。运算符new用于动态申请存储空间,它的操作数为某种数据类型且可以带有初值表达式或元素个数,若带初值,则其表达式为:指针>=new类型>(初值);如C选项所示,若带有元素个数,则其语法格式为:《指针》=new类型>[元素个数>],如A选项所示。数组定义中数组大小必须为常量,而B选项中的n为一变量所以是错误的。

  • 第20题:

    下列有关指针的用法中,错误的是( )。

    A.int i;int *p=&i;

    B. int i;int *p;i=*p;

    C. int *p;p=0;

    D.int i=5;int *p;p=&i;


    正确答案:B
    解析:“int i;”语句为定义了一个整型变量i。“int *p”为定义一个整型指针p。选项A) 中的“int *p=&i;”是定义整型指针变量p,并指向整型i的地址。选项B) 中“i=*p”语句是将p指向的变量赋值给i,而指针p没有初始化,所以选项B) 错误。选项C) 中“p=0;”表示p指向0的地址。选项D) 中“&i”为取i的地址,并赋值给p。

  • 第21题:

    类MyClass的定义如下: class MyClass { pubfic: MyClass(){value=0;} SetVariable(int i){value=i;) private: intvalue; }; 则对下列语句序列正确的描述是( )。 MyClass*p,my;p=&my;

    A.语句p=&my;是把对象my赋值给指针变量p

    B.语句MyClass*p,my;会调用两次类MyClass的构造函数

    C.对语句*p.SetVariable(5)的调用是正确的

    D.语句p->SetVadable(5)与语句my.SetVariable(5)等价


    正确答案:D

  • 第22题:

    若有以下定义语句: double a[5],*p=a; int i=0; 对a数组元素错误的引用是( )

    A.a[i]

    B.a[5]

    C.p[4]

    D.p[i]


    正确答案:B

  • 第23题:

    已知函数原型为:structtree*f(intx1,int*x2,structtreex3,structtree*x4),其中tree为已定义的结构体类型,且有下列变量定义:structtreept,*p;inti;请选择正确的函数调用语句()

    • A、&pt=f(10,&i,pt,p);
    • B、p=f(i++,(int*)p,pt,&pt);
    • C、p=f(i+1,&(i+2),*p,p)
    • D、f(i+1,&i,p,p);

    正确答案:B

  • 第24题:

    单选题
    下列有关指针的用法中,错误的是(  )。
    A

    int i;int *p=&i;

    B

    int i;int *p;i=*p;

    C

    int *p;p=0;

    D

    int i=5;int *p;p=&i;


    正确答案: B
    解析:
    A项正确,“int *p=&i;”定义整型指针变量p,初始化指向整型i;B项错误,指针p没有初始化;C项正确,“p=0;”表示p指向内存的地址为0;D项,p存放i的地址。