这个声明非常令人困惑:
char* q {new char[1024]{}}; // q[i] becomes 0 for all
这是“指向char
数组的指针”还是“char
指针数组”?
我认为new char[1024]{}
正在初始化一个包含1024个元素的char
数组,每个元素的值都为0
。
所以这与:
相同char* q = [0,0,....] // until 1024
正确?
答案 0 :(得分:28)
char* q {new char[1024]{}};
等于
char* q = new char[1024]{};
又等于
char* q = new char[1024] { 0, 0, 0, 0 /* 1020 more zeros */ }
答案 1 :(得分:22)
q
是指向char
的指针。换句话说,它的类型为char *
。
使用表达式new char[1024]{}
对其进行初始化,该表达式动态分配char
数组并对其进行零初始化。如果失败,将抛出异常。
q
将指向动态分配的数组中的第一个char
。它不是一个数组。
与
不一样char * q = [0,0,....] //直到1024
因为那是无效的语法。它也不等同于
char* q = {0,0,....}; // 1024 zeros in initialiser
因为q
是一个指针,无法初始化为一组值。它((净)效果更接近
char *q = new char[1024]; // dynamically allocates chars uninitialised here
std::fill(q, q + 1024, '\0');
除了将字符初始化为零,而不是首先未初始化然后用零覆盖(当然,由编译器决定如何初始化字符)。