1)在C ++中,提供与{}
相同的初始化列表{0}
?声明:
int x[10]={};
int x[10]={0};
两个都生成相同的数组,所有元素都初始化为0?
2)在NULL
不为0的系统/编译器上,对指针数组进行默认值初始化是否将元素设置为NULL或0?应该/可以使用以下哪些陈述?
int *x[10]={NULL};
int *x[10]={0};
int *x[10]={};
使用空括号的new
值初始值设定项怎么样?它们是使用NULL还是0作为初始值设定项?
int **x=new int*[10]();
答案 0 :(得分:5)
是。这两个初始化程序在功能上都是等效的。区别在于第二个元素显式地将第一个元素初始化为0,并且隐式地对数组中的所有剩余元素进行值初始化(在int
的情况下,意味着将它们设置为0)。
NULL
为0
。在这种情况下,所有三个在功能方面都是相同的。 NULL
是一个扩展为0
的宏,因此前两个在编译器眼中是相同的。我不确定与C ++ 11的交易是什么,但指针的值初始化意味着将指针设置为NULL
。