C++程序输出(24)(C++ vs C)

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

null
  1. 方案1

    #include <iostream>
    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(“”)字符。但是在C++中,大小应该是1,那么字符的数目,因此下面的语句是正确的。

    char array[4] = "abc"    // O.K. for  C++
  2. 方案2

    #include <iostream>
    using namespace std;
    int main()
    {
    cout << sizeof ( 'x' );
    cout << sizeof ( char );
    return 0;
    }

    
    

    输出:

    1 1
    

    说明: 值得注意的是,字符常量被存储为C++中的字符类型,但C中的情况并非如此。

    4 1     // result when code is executed in C

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

  3. 方案3

    #include <iostream>
    using namespace std;
    int main()
    {
    void *ptr1;
    char *ptr2;
    ptr2 = ptr1; // statement 1
    return 0;
    }

    
    

    输出:

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

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

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

    注释- 需要注意的是,当同样的代码在C中编译时,它不会产生任何错误,也就是说,在C中,我们可以将一个空指针指定给一个非空指针,而无需使用任何类型转换。

  4. 方案4

    #include <iostream>
    using namespace std;
    int main()
    {
    const int size;
    cout << size;
    return 0;
    }

    
    

    输出:

    error: uninitialized const 'size'
    

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

  5. 项目5

    #include <iostream>
    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值自动转换为枚举值。因此,在执行代码时会出现错误。但是,如果类型转换完成,代码将把语句1更改为以下语句-

    season myFavSeason_2 = (season) 4; 
    

相关文章: C与C++ 本文由 阿维纳什·库马尔·辛格 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享