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 请按任意键继续. . .