我是 C++ 新手,我通过不同的教程进行了学习,在其中一个教程中我找到了一个代码示例: 我已经指出了很多行,但我完全不明白;
这个数组是数组还是类似的数组?
我可以理解第二个调用,但是第一个调用在做什么?已经有 “坐标[ block [num]]”,不是吗?为什么需要再次 block (i)?
如何使这部分代码变得更简单?是否用这个数组进行了结构 不会让从数组中获取值变得更容易吗?
提前致谢!
// Global vars
Struct Rect {
float left;
}
Rectangle *coordinates;
int *blocks;
coordinates = new Rect[25];
blocks = new int[25];
// in method storing values
const int currentBlock = 0; //var in cycle
coordinates[currentBlock].left = column;
blocks[currentBlock] = currentBlock;
//get element method
const Rect& classA::Coords(int num) const
{
return coordinates[blocks[num]]; //(2)
}
//and calling this method like
Coords(blocks[i]); //(3)
Coords(i); //(3)
// (4)
最佳答案
不,不是真的。很多人会认为它们是数组,甚至将它们描述为数组,但实际上不是。
坐标
和block
都是指针。它们仅分别存储Rect
和int
的单个地址。但是,例如,当您执行
coordinates = new Rect[25];
时,您将分配一个包含 25 个Rect
的数组并设置指针坐标
指向该数组中的第一个元素。因此,虽然坐标本身是一个指针,但它指向数组中的第一个元素。您可以像索引数组一样索引
坐标
和block
。例如,坐标[3]将访问您分配的矩形数组的第四个元素。它的行为与数组相同的原因是因为它实际上是相同的。例如,当您有一个实际的数组arr
时,并且执行arr[4]
,该数组首先会转换为指向其第一个元素的指针,然后进行索引.不,这不是数组的数组。它的作用是在一个数组 (
blocks[num]
) 中查找一个值,并使用该值来索引下一个数组 (coordinates[blocks[num]]
)。因此,一个数组将索引存储到另一个数组中。我会忽略这不会编译,但在这两种情况下,您都会将
int
传递给Coords
函数。第一种情况看起来不正确,但也可能不是。它获取blocks[i]
处的值,将其传递给函数,然后使用该值来索引blocks
以获得另一个值,然后使用该另一个值来索引坐标
。在第二种情况下,您只需传递i
,它用于索引block
,为您提供一个用于索引坐标
的值。这是一个广泛的问题,如果不确切知道您想要简化什么并且没有看到一些真正有效的代码,我认为我无法回答。
关于c++ - C++数组结构的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24829792/