c++程序猿经典面试题(2)

1.以下程序的输出结果是?

#include<stdio.h>

main(){

int b=3;

int arr[]={6,7,8,9,10};

int *ptr=arr;

*(ptr++)+=123;

printf("%d,%d\n",*ptr,*(++ptr));

}

答案:

8,8

c中printf计算參数时是从右到左压栈的。

2.以下程序的输出结果?

#include<iostream>

using namespace std;

int main(){

float a = 1.0f;

cout << (int)a << endl;

cout << &a << endl;

cout << (int&)a << endl;

cout << "boolalpha" << ((int)a == (int&)a) << endl;

cout << endl;

cout << endl;

float b = 0.0;

cout << (int)b << endl;

cout << &b << endl;

cout << (int&)b << endl;

cout << "boolalpha" << ((int)b == (int&)b) << endl;

getchar();

return 0;

}

答案:

(int )a 是把内存中单元的值从其它类型解析为int类型,并创建一个暂时对象。

(int &)a 是告诉c++内存中是一个int类型,并返回一个引用对象。
(int&)a == static_cast<int&>(a)
(int)&a == reinterpret_cast<int>(&a);
(int&)a 不经过转换, 直接得到a在内存单元的值
(int)a a在内存中的值转换成int类型

float类型在内存中存储的形式是 ,符号位 指数 尾数
由754标准:阶码採用增码(该数补码的反符号),尾数採用原码
所以1.0f 在内存中的形式为
0011 1111 1000 0000 0000 0000 0000 0000
所以输出的是 0x3f800000
0 在内存中的的存储形式
0000 0000 0000 0000 0000 0000 0000 0000
(int&)a 把a强制转换成整形引用类型
(int)&a 把a的地址强制转换成整型

(int&)a 相当于
    *(int*)&a

*(int*)(&a)

*((int*)&a)

把float类型当成int类型来解释

3.以下函数的输出结果是?
#include<iostream>
using namespace std;
int main(){
	unsigned int a = 0xFFFFFFF7;
	unsigned char i = (unsigned char)a;
	char* b = (char*)&a;
	printf("%08x,%08x", i, *b);
	getchar();
}
答案:

char *b=(char *)&a
在X86系列的机器中。数据的存储是“小端存储”,小端存储的意思就是。对于一个跨多个字节的数据,其低位存放在低地址单元,其高位放在高地址单元。

比方一个 int 型的数据ox12345678,假如存放在0x00000000,0x00000001,0x00000002,0x00000003这四个内存单元中,那么ox00000000中放的是低位的ox78。而ox00000003中放的是高位的0x12,以此类推。有了以上的认识,我们能够继续分析上面的程序为什么输出fffffff7:
char* b = (char*)&a;这句话究竟干了什么事呢?事实上说来也简单。&a能够觉得是个指向 unsigned int类型数据的指针对吧。(char *)&a则把&a强制转换成 char *类型的指针,而且这个时候发生了截断。截断后,指针b仅仅指向oxf7这个数据,又因为指针b是 char *型的。属于有符号数。所以有符号数0xf7在printf()的作用下输出fffffff7( 这个过程中事实上发生了參数类型提升default argument
promotions)。

%x 表示16进制整数类型输出。
时间: 2024-10-17 13:44:04

c++程序猿经典面试题(2)的相关文章

IOS-4-面试题1:黑马程序猿IOS面试题大全

一.多线程网络 1. 多线程的底层实现? 1> 首先搞清楚什么是线程.什么是多线程 2> Mach是第一个以多线程方式处理任务的系统.因此多线程的底层实现机制是基于Mach的线程 3> 开发中非常少用Mach级的线程,由于Mach级的线程没有提供多线程的基本特征,线程之间是独立的 4> 开发中实现多线程的方案 l C语言的POSIX接口:#include <pthread.h> l OC的NSThread l C语言的GCD接口(性能最好.代码更精简) l OC的NSO

c++程序员经典面试题(2)

1.下面程序的输出结果是? #include<stdio.h> main(){ int b=3; int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d\n",*ptr,*(++ptr)); } 答案: 8,8 c中printf计算参数时是从右到左压栈的. 2.下面程序的输出结果? #include<iostream> using namespace std; int main(){

c++程序员经典面试题

1.请问i的值会输出什么? #include"iostream.h" int i=1; void main() { int i=i; cout<<i<<endl; } 答案: i是一个未定义的值. 因为你在main函数里面你重新定义了一个局部变量i,而且没有初始化,它的值就是一个随机值.(所分配内存位置转换为int后的值). 同时,在main函数里面使用i会覆盖之前定义的全局变量i(即int i = 1那句).输出i的值是局部变量i的值. 2.请问x会输出什么?

JAVA程序猿面试题汇总

(此话题将不断更新,请留意) 第一,谈谈final, finally, finalize的差别. final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承.finally是异常处理语句结构的一部分,表示总是运行.finalize是 Object类的一个方法,在垃圾收集器运行的时候会调用被回收对象的此方法,能够覆盖此方法提供垃圾收集时的其它资源回收,比如关闭文件等. 第二,Anonymous Inner Class (匿名内部类) 能否够extends(继承)其它类,能否够

Java程序猿面试题集(181- 199)

Java面试题集(181-199) 摘要:这部分是包括了Java高级玩法的一些专题,对面试者和新入职的Java程序猿相信都会有帮助的. 181.  182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199.

程序猿得看的经典好书

READING Algorithm C C++ Coding Java Linux Network OS 其实想写这篇文章的缘由是因为看了微信公众号菜鸟教程推荐的那篇编程入门技巧大全,对于它说的一点我非常赞同就是多看好书,多读经典,并对它推荐的经典书籍作了记录,以方便后面可以拜读. 什么叫好书 差书会误人子弟,不但浪费了时间和精力,更可怕的是他会打击人的自信心,会让人越来越怀疑自己的学习能力.而好书虽然好,但是数量却很少,特别是被大家公认很有价值的好书更是少之又少.历经多年时间考验和市场风雨的残

我读经典(7):读《程序猿生存定律》有感

一提到程序猿.大家的脑海中会想到什么呢?码农.软件.研发.加班.辛苦.沉闷.呆头呆脑.理工男.编程.屌丝等等. 确实,程序猿是一个非常特殊的群体,网上有关"程序猿"的话题可谓是无处不在. 或许是上天的安排.本人"非常不幸"地增加了程序猿的大军,经历了各种艰酸苦楚之后,对这个职业有了更加清楚的认识. 近期.我阅读了李智勇老师免费提供给大家的<程序猿生存定律>这本电子书,颇有感触.本书由作者的CSDN博客上的文章整理而成,一共包含了8章内容,各自是:第一章,

【转】嵌入式软件工程师经典笔试题

嵌入式软件工程师经典笔试题 > 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3).

35岁程序猿的那点事儿(连载)

开篇 其实希望酝酿一篇自己的中长篇或者连载已经有很久了. 不管怎样,今天都希望有一个开篇,但最后会写成什么样,我也说不好. ----0422 晚上下班回来打星际1,对于一个35岁+的程序猿来说,实在是说出来有点可耻的事情.所以克制起来的唯一办法,就是把它卸了.几天后在看了若干书,和背了几页英语字典后,终于打开博客. 起初1,2年前触发我真正有想法开始写这的原因是那时相对于现在鲜有的空闲,和偶尔的颓感.而现在忙碌后,反而有了心思写这个东西. 今天偶尔又翻看了一些文字,终于熬不住要码点什么(什么文字