[牛客网]错题整理(8)

错题集

1.若变量已正确定义

:for( x=0,y=0; ( y!=99 && x<4 ); x++ )

则以上for循环()

答案:执行4次

解析:常见的字符转意:

1 &表示  &

2  <表示 <

3  >表示 >

4  " 表示 "

5  表示 " "

此语句为:for(x=0,y=0;(y!=99&&x<4);x++)  

 

2.有如下程序段:

char a[] = "xyz", b[] = {'x', 'y', 'z'};

if (strlen(a) > strlen(b))

    printf("a > b\n");

else

    printf("a <= b\n");

 

则程序输出:

答案:a <= b

解析:char a[] = "xyz", b[] = {'x', 'y', 'z'};

a容易理解,strlen(a)=3;

b是数组,元素在内存中是连续存储的,而strlen函数求字符串长度是要以'\0'结尾,但是b没有'\0',

3.strlen的内部函数指针会一直向后搜索,直至找到'\0',内存中的其他区域也是有数据的,只是没有意义,

所以,strlen的指针最后指到哪里无法确定,但是结果肯定大于等于3.

 

4.在下面的类定义中,横线上应填入的内容是

 

答案:int Fred::

解析:静态变量在类外初始化要加上::,同时不能再加static关键字

 

5.若有定义语句:char s[3][10],(*k)[3],*p;则以下赋值语句错误的是()

1.p=s;

2.p=k;

3.p=s[0];

4.k=s;

答案:124

解析:

p 是指向 char 的指针

k 是指向 char数组的指针,数组大小为3

s 是指向 char数组的指针,数组大小为10

 

k=s 错误是因为,k和s指向的数组大小不同。

k+1 地址移动3个 char的大小

s+1 地址移动10 个char的大小

 

如果将s 的定义改成 char s[3][3],那么 k=s 就正确了

或者将k 的定义改成 char (*k)[10],那么 k=s 也正确

 

6.若要重载+、=、<<、=和[]运算符,则必须作为类成员重载的运算符是

答案:=和[]

解析:

(1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。

(2)单目运算符最好重载为成员函数。

(3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。

(4) 对于其它运算符,建议重载为友元函数。

运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:

函数类型 operator 运算符名称 (形参表列)

{

  对运算符的重载处理

}

重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)

重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值