Sam*_*amy 20 c++ pointers initializer-list
这个声明很混乱:
char* q {new char[1024]{}}; // q[i] becomes 0 for all
Run Code Online (Sandbox Code Playgroud)
这是"指向char数组的char指针" 还是" 指针数组"?
我认为这new char[1024]{}是初始化一个char1024个元素的数组,每个元素的值为0.
所以这和:
char* q = [0,0,....] // until 1024
Run Code Online (Sandbox Code Playgroud)
正确?
Tim*_*mbo 28
char* q {new char[1024]{}};
Run Code Online (Sandbox Code Playgroud)
等于
char* q = new char[1024]{};
Run Code Online (Sandbox Code Playgroud)
反过来等于
char* q = new char[1024] { 0, 0, 0, 0 /* 1020 more zeros */ }
Run Code Online (Sandbox Code Playgroud)
Pet*_*ter 22
q是指向a的指针char.换句话说,它是类型char *.
它使用new char[1024]{}动态分配数组char并对其进行零初始化的表达式进行初始化.如果失败,将抛出异常.
q将指向char动态分配的数组中的第一个.它不是一个数组.
它不一样
char*q = [0,0,....] //直到1024
因为那是无效的语法.它也不等同于
char* q = {0,0,....}; // 1024 zeros in initialiser
Run Code Online (Sandbox Code Playgroud)
因为q是一个指针,不能初始化为一组值.它((净)效果更接近
char *q = new char[1024]; // dynamically allocates chars uninitialised here
std::fill(q, q + 1024, '\0');
Run Code Online (Sandbox Code Playgroud)
除了字符初始化为零,而不是首先未初始化然后用零覆盖(当然,由编译器如何初始化字符).