【程序员面试宝典】第五章 程序设计基本概念

2013-07-28 19:40:41

面试宝典上的题目设计到而定东西很碎,很繁琐,不是针对数据结构与算法的考查,准备在两周内看完,并把一些自己美考虑到的记下来,方便日后复习。

考查点:自增运算++、与解引用*的优先级,printf函数参数的压栈顺序

*(ptr++) += 123;  注意+与=之间不能有空格,否则报错 error C2059: syntax error : '='

另外,该语句的执行等价于

*ptr = *ptr + 123;

ptr++;

而不是

*(ptr++) = *(ptr++) + 123;

printf函数参数的压栈顺序是从右向左的,因此printf("%d,%d ",*ptr,*(++ptr));先进行*(ptr++),然后*ptr。

疑问:

包括《C++primer》等在内的权威书籍中都指出自增运算++、与解引用*的优先级是相同的,而且结合性是自右向左,根据这种优先级,如何解释此处的情况??

代码:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int array[] = {6,7,8,9,10};
 7     int *ptr = array;
 8 
 9     *(ptr++) += 123;  //+与=之间不能有空格,否则报错 error C2059: syntax error : '='
10     printf("%d,%d
",*ptr,*(++ptr));
11 
12     return 0;
13 }

运行结果:

8,8
请按任意键继续. . .

考查:数据类型的装换以及数据在内存中的表示方式

(int)fvar是进行强制类型转换;

(int&)fvar:fvar地址开始的sizeof(int)个字节对应的int型数据;与fvar在内存中的表示方式有关。

float采用浮点表示方法,最高位为符号位,接下来的23位为阶码位,第8位为尾数。

代码:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     float fvar = 1.0f;
 7 
 8     cout<<"test fvar = "<<fvar<<endl;
 9     cout<<(int)fvar<<endl;
10     cout<<&fvar<<endl;
11     cout<<(int&)fvar<<endl;
12     cout<<boolalpha<<( (int)fvar == (int&)fvar )<<endl;
13 
14     fvar = 0.0f;
15     cout<<"test fvar = "<<fvar<<endl;
16     cout<<(int)fvar<<endl;
17     cout<<&fvar<<endl;
18     cout<<(int&)fvar<<endl;
19     cout<<boolalpha<<( (int)fvar == (int&)fvar )<<endl;
20 
21     return 0;
22 }

运行结果:

test fvar = 1
1
0018FA18
1065353216
false
test fvar = 0
0
0018FA18
0
true
请按任意键继续. . .
原文地址:https://www.cnblogs.com/youngforever/p/3221636.html