📜  C++ 程序的输出 |第 24 组(C++ 与 C)

📅  最后修改于: 2021-09-15 01:51:42             🧑  作者: Mango

预测以下 C++ 程序的输出。

  1. 方案一
    #include 
    using namespace std;
    int main()
    {
        char array[3] = "abc";
        cout << array;    
        return 0;
    }
    

    输出:

    error: initializer - string for array of chars is too long
    

    说明:数组在C++中的应用与C中类似,唯一的例外是字符数组的初始化方式。在 ANSI C 中初始化字符数组时,编译器将允许以下声明——

    char array[3] = "abc"    // allowed in ANSI C

    这是因为 C 假定程序员打算在定义中省略 NULL (‘\0’)字符。但是在 C++ 中,大小应该比字符数大 1,因此以下语句是正确的。

    char array[4] = "abc"    // O.K. for  C++
  2. 方案二
    #include 
    using namespace std;
    int main()
    {
        cout << sizeof('x');
        cout << sizeof(char);    
        return 0;
    }
    

    输出:

    1 1
    

    说明:值得注意的是,字符常量在 C++ 中被存储为字符类型,但在 C 中并非如此。在 ANSI C 中,相同的程序会产生结果——

    4 1     // result when code is executed in C

    因为字符常量被提升为 int。
    建议您在 C 中执行相同的代码

  3. 方案三
    #include 
    using namespace std;
    int main()
    {
        void *ptr1;
        char *ptr2;
        ptr2 = ptr1; // statement 1
        return 0;
    }
    

    输出:

    error: invalid conversion from 'void*' to 'char*
    

    说明:在 C 或 C++ 中允许将任何指针类型分配给空指针而不使用强制转换。但是我们不能在 C++ 中不使用转换为非空指针类型的情况下将空指针分配给非空指针。因此,陈述一应该是——

    ptr2 = (char*)ptr1;    // valid in C++

    注意——应该注意的是,当相同的代码在 C 中编译时,它不会产生任何错误,即在 C 中我们可以将一个空指针分配给一个非空指针,而无需使用任何类型转换。

  4. 程序 4
    #include 
    using namespace std;
    int main()
    {
        const int size;
        cout << size;
        return 0;
    }
    

    输出:

    error: uninitialized const 'size'
    

    解释:乍一看很明显会认为输出将是一些垃圾值,但事实并非如此。与 C++ 中的 C 不同,任何声明为常量的变量都需要在声明时进行初始化。因此给定的代码不会编译并抛出错误。应该注意的是,相同的代码将在 ANSI C 中编译,并将产生 0 的输出。

  5. 计划5
    #include 
    using namespace std;
    int main()
    {
        enum season { spring, summer, autumn, winter };
          
        season myFavSeason_1 = spring;
        season myFavSeason_2 = 4;  // statement 1
          
        cout << myFavSeason_1;
        cout << endl;
        cout << myFavSeason_2;
      
        return 0;
    }
    

    输出:

    error: invalid conversion from 'int' to 'main()::season'
           season myFavSeason_2 = 4;
    

    说明:与 C++ 中的 C 不同,每个枚举数据类型都保留其自己单独的类型。这意味着 C++ 不允许将 int 值自动转换为 enum 值。所以在执行代码时会出错。但是,如果类型转换完成,代码将工作,将语句 1 更改为以下语句 –

    season myFavSeason_2 = (season) 4;