C++从C继承了数组,几乎无处不在.C++提供了易于使用且不易出错的抽象(std::vector<T>自C++ 98和C++ 11std::array<T, n>以来),因此对数组的需求并不像在C中那样频繁出现.但是,当您阅读遗产时代码或与用C编写的库交互,你应该牢牢掌握数组如何工作.
本FAQ分为五个部分:
如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其作为附加部分链接到此处.
在下文中,"数组"表示"C数组",而不是类模板std::array.假定了C声明符语法的基本知识.请注意,面对异常,手动使用new和delete如下所示是非常危险的,但这是另一个常见问题解答的主题.
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我目前正在研究将2d地形图保存为一维数组的项目.地图中的每个块都由xy坐标索引.因此,为了将地图保存为一维数组,我使用行主要顺序方法(http://en.wikipedia.org/wiki/Row-major_order)将xy坐标转换为单个索引值(其中让我把块放到一个数组中).
现在,我的问题是如何将其转换回来?我有一个唯一的号码,我必须转换回xy坐标.任何帮助,将不胜感激.^^
我用两种不同的方式在C中创建了两个2D数组(矩阵).
我不明白它们在内存中的表示方式之间的区别,以及我不能以相同的方式引用它们的原因:
scanf("%d", &intMatrix1[i][j]); //can't refer as &intMatrix1[(i * lines)+j])
scanf("%d", &intMatrix2[(i * lines)+j]); //can't refer as &intMatrix2[i][j])
Run Code Online (Sandbox Code Playgroud)
这两个数组的实现方式有何不同,为什么我必须以不同的方式引用它们?
如何以相同的方式(??????在我的printMatrix函数中)引用每个数组中的元素?
int main()
{
int **intMatrix1;
int *intMatrix2;
int i, j, lines, columns;
lines = 3;
columns = 2;
/************************* intMatrix1 ****************************/
intMatrix1 = (int **)malloc(lines * sizeof(int *));
for (i = 0; i < lines; ++i)
intMatrix1[i] = (int *)malloc(columns * sizeof(int));
for (i = 0; i < lines; ++i)
{
for (j = 0; j …Run Code Online (Sandbox Code Playgroud) 这是我的代码,
int a[3][3] ={
{0,1,2},
{3,4,5},
{6,7,8}
};
for(int i = 0 ; i < 3 ; i ++)
for(int j = 3 ; j>0 ; j--)
cout << a[i-1][j] << " ";
Run Code Online (Sandbox Code Playgroud)
我期望输出是, "0 0 0 0 2 1 0 5 4"
但结果是"0 0 1 3 2 1 6 5 4"
这背后的原因是什么?
例如,我有这些int价值.
int map1[10][10] = //;
int map2[10][10] = //;
int map3[10][10] = //;
int map4[10][10] = //;
int map5[10][10] = //;
for (int i = 1 ; i < 6 ; i++)
map{i}[2][2] = 3;
Run Code Online (Sandbox Code Playgroud)
上面的代码只是为了说明/理解,我知道这是错误的.我如何选择/访问我int的?