概述
现象
加括号
auto func = [](int n){
int *B=new int[n](); // 这里加了括号
for(int i=0;i<n;i++){
std::cout<<B[i]<<" ";
}
std::cout<<std::endl;
delete[] B;
};
func(5);
Linux下/Mac下输出结果一致:
0 0 0 0 0
不加括号
auto func = [](int n) {
int *B = new int[n]; // 这里没加括号
for (int i = 0; i < n; i++) {
std::cout << B[i] << " ";
}
std::cout << std::endl;
delete[] B;
};
func(5);
在Linux下输出结果:
0 0 0 0 0
在Mac下输出结果:
-1220541584 32750 2 1 -1220541600
想指定初始化的值
auto func = [](int n){
int *B=new int[n](1); // error: 不能为数组指定新的初始值设定项
for(int i=0;i<n;i++){
std::cout<<B[i]<<" ";
}
delete[] B;
};
想通过迭代的方式访问new数组
auto func = [](int n) {
int *B = new int[n]();
for (int i:B) { // error: 此基于范围的“for”语句需要适合的 "begin" 函数,但未找到
std::cout << i<< " ";
}
delete[] B;
};
通过迭代的方式访问普通数组
auto func = []() {
int B[5] = {1, 2, 3};
for (int &i : B) {
std::cout << i << " ";
i = 9;
}
std::cout << std::endl;
for (int i : B) {
std::cout << i << " ";
}
std::cout << std::endl;
};
func();
输出结果:
1 2 3 0 0
9 9 9 9 9
不指定初始化列表
auto func = []() {
int B[5]; // 这里没指定初始化列表
for (int &i : B) {
std::cout << i << " ";
i = 9;
}
std::cout << std::endl;
for (int i : B) {
std::cout << i << " ";
}
std::cout << std::endl;
};
func();
输出结果:
1 14 0 0 0
9 9 9 9 9
指定初始化列表长度小于数组长度
auto func = []() {
int B[10] = {1};
/*这样也可以编译通过,效果一样
int B[10] = {
1,
};
*/
for (int &i : B) {
std::cout << i << " ";
i = 9;
}
std::cout << std::endl;
for (int i : B) {
std::cout << i << " ";
}
std::cout << std::endl;
};
func();
输出结果:
1 0 0 0 0 0 0 0 0 0
9 9 9 9 9 9 9 9 9 9
指定初始化列表长度大于数组长度
int B[2] = {1, 2, 3, 4}; // error: 初始值设定项值太多
结论
在new数组的时候
加()一定初始化为0,而且里面不能指定初始化的值,只能用无参构造函数。
不加()不一定初始化为0,结果因编译器而异。
不能通过:迭代的方式访问new数组,但是可以迭代访问普通数组。
创建普通数组的时候
不指定初始化列表,则默认初始化不确定。
指定初始化列表中数目少于数组长度,只给前面的赋值,后面的填充为0,初始化列表数目不得大于数组长度。
最后
以上就是留胡子耳机为你收集整理的C++数组初始化与遍历的全部内容,希望文章能够帮你解决C++数组初始化与遍历所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复