C++技术岗位笔试真题:数据类型转换与指针应用.pdfVIP

  • 0
  • 0
  • 约7.79千字
  • 约 15页
  • 2026-01-27 发布于北京
  • 举报

C++技术岗位笔试真题:数据类型转换与指针应用.pdf

选择题

32位机上根据下面的代码,问哪些是正确的?()

signedchara=0xe0;

unsignedintb=a;

unsignedcharc=a;

A.a0c0为真

B.a==c为真

C.b的十六进制表示是:0xffffffe0

D.上面都不对

:C

考点:有符号数和无符号数之间的转换。

解析:

•将0xe0转换成二进制是11100000,因为0xe0的最是1,所以作为有符号

数的时候就是负数,作为无符号数的时候就是正数,因此A选项是错的,同时B

也是错误的。

•负数的用1补齐,正数的用0补齐,所以b(0xe0)的二进制表示形

式是11111111111111111111111111100000,十六进制的表示形式是0xffffffe0。

下面哪些选项能编译通过?

inti;

chara[10];

stringf();

stringg(stringstr);

A.if(!!i){f();}

B.g(f());

C.a=a+1;

D.g(abc);

:A

考点:C++的细节掌握。

解析:

•A是肯定对的,因为他有一个默认值。

•B选项是错误的。因为f()返回的是一个临时量,然后传给g函数,而g的

参数不是const,是不能临时量的。

•C选项是错误的。因为a是一个地址常量,不可能再被赋值。

•D选项是错误的。因为abc的类型可是constchar*呢,是个常量指针(可以

用来初始化string)。(对这题我有点疑问,因为我不是学C++的,所以希望读者

看到可以帮我解答一下,谢谢)

inta[10];问下面哪些不可以表示a[1]的地址?

A.a+sizeof(int)

B.a[0]+1

C.(int*)a+1

D.(int*)((char*)a+sizeof(int))

:A

考点:C++数组的指针表示形式的掌握

解析:

•A.a+sizeof(int)选项不正确,假设在32位机器上,sizeof(int)的值为4,而

a+sizeof(int)相当于指针运算a+4,也就是a[4]

•B.a[0]+1选项正确,因为a[0]的意思是取的数组首元素地址,而数组首元

素地址加1(a+1),根据指针运算就是a[1]的地址

•C.(int*)a+1选项正确,因为数组地址被强制类型转换为int*,然后加1,这样

和B表示的一个意思

•D.(int*)((char*)a+sizeof(int))选项正确,因为数据地址先被转换为char*,然后

加4,根据指针运算,向前移动4*sizeof(char),被转换为int*,显然是

a[1]的地址

问下面的数据都存放在哪些区?

intmain()

{

char*p=hello,world;

return0;

}

A.堆态数据区

B.栈态数据区

C.栈和常量区

D.栈和堆

:C

解析:其实,在做这一题的时候,我是当成Java来做的,呵呵

•根据C语言中的特性和定义p是一个局部变量,而C语言中局部变量存在于

栈中,hellowrold是一个字符串字面常量,因此于程序的只读区中,p

在这里其实只是指向了hellowrold在只读区中的地址而已

下面哪些正确?()

A.数组和链表都可以随机

B.数组的和删除可以O(1)

C.哈希表没有办法做范围检查

D.以上都不正确

:B

解析:

•A选项是错误的,因为数组可以直接通过下标得到的值因此支持随机;

而链表是链式结构时无法支持随机,要一个指定位置的元素必

须从头开始做指针移动

文档评论(0)

1亿VIP精品文档

相关文档