数组 ->另一个空的 int 数组混淆
array -> another empty int array confusion
考虑以下内容,您有两组数组,其中一组数组中存储了一些整数和值,您可以将它们放在一个数组中,并轻松地对数组中的值进行排序。然而,当你有一个数组中有空整数时——它似乎无法将值"存储"到整数值——为什么?
这里有一个例子:
int empty1;
int empty2;
int contain1 = 100;
int contain2 = 200;
int container [2] = { contain1, contain2 };
int empty_container [2] = { empty1, empty2 };
int i = 0;
while ( i != 2 ) {
empty_container[i] = i;
cout << endl << "empty_container[i]: " << empty_container[i] << endl
<< "empty1: " << empty1 << endl << "empty2: " << empty2 << endl;
cout << "i: " << i << endl;
cout << "container[i]: " << container[i] << endl;
cout << "contain1: " << contain1 << endl;
cout << "contain2: " << contain2 << endl;
i++;
}
输出:
empty_container[i]: 0
empty1: 4197341
empty2: 0
i: 0
container[i]: 100
contain1: 100
contain2: 200
empty_container[i]: 1
empty1: 4197341
empty2: 0
i: 1
container[i]: 200
contain1: 100
contain2: 200
注意到empty1突然变成了值"4197341",而empty2是0,这是怎么回事?
UPD(来自评论(:
我的意思是,就像在前面声明一个整数,然后通过数组设置它一样——这在C++中是不可能的吗
因为您从未初始化或为empty1
和empty2
赋值。empty1
和empty2
没有全局或静态存储,它们不会被隐式初始化。它们都包含垃圾值。
你有undefined behavior
。您可以看到,这个编译器对empty1
和empty2
的值给出了不同的结果:本地变量未初始化Demo
在使用之前一定要记住初始化变量。
编辑:
我的意思是,就像在前面声明一个整数,然后通过数组设置它一样——这在C++中是不可能的吗?
IMHO,你不能那样做。您可以使用给定的初始化变量初始化数组元素。然而,你所做的:
int empty_container [2] = { empty1, empty2 };
将不会将值分配给具有该数组中的值的CCD_ 8和CCD_。
但是,您可以尝试以下操作:
empty_container[2] = {10}; //initialize array at first
empty1 = empty_container[0];
empty2 = empty_container[1]; //this will give you empty1 10 and empty2 0
在这里查看另一个实时演示:数组和变量初始化演示
在这里
...
int i = 0;
while ( i != 2 ) {
empty_container[i] = i; // <- HERE
cout << endl << "empty_container[i]: " << empty_container[i] << endl
...
您一定已经假设执行empty_container[i] = i
也会影响empty1
或empty2
。看来你想错了。
在C++中,执行int empty_container [2] = { empty1, empty2 };
将empty1
和empty2
的值复制到empty_container
的相应元素中。这意味着,即使它们具有相同的值,它们也不会引用相同的内存位置。
为了在修改empty_container
时也修改empty1
和empty2
,必须修改empty_container
并将其更改为指针数组,或者使用一些类似的方法来引用某个对象。
代码:
#include <iostream>
using namespace std;
int main() {
int empty1;
int empty2;
int contain1 = 100;
int contain2 = 200;
int container [2] = { contain1, contain2 };
int* empty_container [2] = { &empty1, &empty2 };
// ^ Notice this
int i = 0;
while ( i != 2 ) {
*(empty_container[i]) = i;
// ^ Also this
cout << endl << "empty_container[i]: " << empty_container[i] << endl
<< "empty1: " << empty1 << endl << "empty2: " << empty2 << endl;
cout << "i: " << i << endl;
cout << "container[i]: " << container[i] << endl;
cout << "contain1: " << contain1 << endl;
cout << "contain2: " << contain2 << endl;
i++;
}
}
注意,empty1
在第一次迭代中变为0
,empty2
在第二次迭代中变成1
。
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 按字符值访问int数组
- 将 int 数组转换为 std::vector<int*>
- 比较if语句中的数组值和int值
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 在c++中获取两个大int,并将它们存储在数组中
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 有没有办法用 2D 数组 (int) 重载构造函数?
- 当大小未知时,如何迭代指向数组 (int*) 的指针?
- 接受来自函数的二维数组(int 类型)并将其返回到主函数
- 数组 + int 作为一个参数做什么
- 如何制作'bit'数组而不是数组'int'?
- 动态2d数组:int(*ptr)[4]=new int[7][4];
- 为[z][y][x]int定义数组int[x][y][z]有什么好处?
- 用Visual c++编写二维数组int[n][m]到HDF5文件
- 数组int未正确返回
- 将元素推送到动态分配的指针数组int C++
- 如何在另一个数组中插入多维数组(int而非char)
- 将数组(int*)设置为NULL是否释放其占用的内存
- C++如何将数组 int[10] push_back std::vector<int[10]>?