- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
32 位机上根据下面的代码,问哪些说法是正确的?
signed char a = 0xe0;
unsigned int b = a;
unsigned char c = a;
A. a0 c0 为真B. a == c 为真C. b 的十六进制表示是:0xffffffe0 D. 上面都不对
分析:坑爹丫,有木有!10 个人9 个这个恐怕都不敢确定!(敢肯定的要么是高手,要么就是错
的!) B me 认为是错的,一个uchar 和一个schar 比较,真的就是一个字节在比较吗?C me 认为是
对的,将一个schar 赋值给一个uint,要不要符号扩展呢?是绝对会还是可能会呢?细节到底是神
马?O__O…A 貌似比较确定,肯定是错的,肯定?
揭露真相:A 确实是错的,B 也是错的,C 是对的,所以D 也是错的。理由?A 错是因为,a 是负
数,c 是正数,即使跟0 比较要转换到int(后面暂不区分转换和类型提升,总之就是类型变了),也
是一负一正,所以A 错。B 呢?是说一正一负不会相等,难道是因为这吗?难道不是吗?首先说a
和c 的二进制表示一模一样,都是0xe0,那么比较就不相等?!是的,比较的时候全部转换为int,
所以呢,a 还是作为一个负数存在,c 作为一个正数存在,于是就不相等了,所以B 错。C 肿么就
对了?a 是一个schar,赋值给uint 的b,前若干个字节不是补0 吗?首先schar 转换为int,然后
int 转换成uint,所以最初是符号扩展,然后一个int 赋值给了uint,C correct !me 曾经要写一篇
关于c 的类型以及指针的blog,不过最后没有完成,不过还是可以参考一下的。
下面哪些选项能编译通过?
int i;
char a[10;
string f();
string g(string str);
A. if(!!i){f();} B. g(f()); C. a=a+1; D. g(abc);
分析:再次坑爹有木有!(其实me 比较确信这道题,是坑别人的爹,O__O…)A 绝对是正确的,C
绝对是错的,D 基本肯定是错的,那B 呢?要么error ,要嚒warning !如果是warning 但是没有
error ,这算神马情况呢?B 确实不应该选,至少语义上不该选!f() 返回一个临时量,然后传给g
1
函数,而g 的参数是非const 引用,是不能引用临时量的!为嘛,如果g 中修改了传进来的string,
那么会是怎么一回事呢?修改了一个临时量的值?那这意义何在呢?但是如果将g 的原型修改为
string g(const string); 就是可以的,为么可以?访问(只读)临时量就是正确的?那必须的,比如u
可能想知道a+b 的结果是多少,然后输出!a+b 的结果就是一个临时量。如果说修改a+b 的结果,
这是神马个逻辑?!
真相:C 错是以为a 是一个地址常量,不可能再被赋值。D 为嘛错呢?abc 的类型可是const
char* 呢,是个常量指针呢!(可以用来初始化string。)
int a[10]; 问下面哪些不可以表示a[1] 的地址?
A. a+sizeof(int) B.a[0]+1 C. (int*)a+1 D. (int*)((char*)a+sizeof(int))
分析:奇葩丫!(其实并不奇葩!)腾讯的题目有时候出的的确有水平丫,虽然出的太有水平了分
就考不高了。me 想哭丫,想来想去还是在A 和B 中选错了,%_%,当时还特意提醒自己来着的,
O__O…c++ 中的sort 如何用来排序a 数组呢?sort(a, a+N); 或是sort(a, a+sizeof(a)/sizeof(a[0])); 当
时懵了,实际上a+1,就是a[1] 的地址呢!a 的类型是int[10],a+1 和一个int* 类型的+1 效果一
样,都表示偏移1 个元素,所以A 不能表示。(选错误的!) C 能表示是因为取了首地址作为一个
int* 然后+1,就是偏移一个元素,所以不选。B 肿么说呢,me 一直一位a[0] 是一个普普通通的
地址,+1 就是+1 个字节,实际上是+1 个元素!D 也能表示?将a 的首地址转换为一个char* 指
针,这个时候+1 是偏移一个char,也就是一个字节,实际上应该偏移sizeof(int) 个字节才能到达
a[1],所以D 可以表示(不选)。不多说了。(如果是二维数组是不是会更懵呢
原创力文档


文档评论(0)