[收集] 经典C/C++面试题(二)

1. 以下三条输出语句分别输出什么?[C易]
    char str1[]       = "abc";
    char str2[]       = "abc";
    const char str3[] = "abc"; 
    const char str4[] = "abc"; 
    const char* str5  = "abc";
    const char* str6  = "abc";
    cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?
    cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?
    cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?

2. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等]
答:
    a. class B : public A { ……} // B公有继承自A,可以是间接继承的
    b. class B { operator A( ); } // B实现了隐式转化为A的转化
    c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数
    d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

3. 以下代码中的两个sizeof用法有问题吗?[C易]
    void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
    {
        for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )
            if( 'a'<=str[i] && str[i]<='z' )
                str[i] -= ('a'-'A' );
    }
    char str[] = "aBcDe";
    cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;
    UpperCase( str );
    cout << str << endl;

posted on 2008-06-19 15:56  高血压的熊  阅读(1487)  评论(0编辑  收藏  举报