预测下列C++程序的输出。
- 方案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
#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
#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
#include <iostream>
using
namespace
std;
int
main()
{
const
int
size;
cout << size;
return
0;
}
输出:
error: uninitialized const 'size'
说明: 乍一看,很明显,输出会是一些垃圾值,但事实并非如此。与C++中的C不同,声明时的任何变量都需要在声明时初始化。因此,给定的代码不会编译并抛出错误。应该注意的是,相同的代码将在ANSI C中编译,并将产生0的输出。
- 项目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主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。