c++ - C++数组结构的误解

标签 c++ arrays

我是 C++ 新手,我通过不同的教程进行了学习,在其中一个教程中我找到了一个代码示例: 我已经指出了很多行,但我完全不明白;

  1. 这个数组是数组还是类似的数组?

  2. 我可以理解第二个调用,但是第一个调用在做什么?已经有 “坐标[ block [num]]”,不是吗?为什么需要再次 block (i)?

  3. 如何使这部分代码变得更简单?是否用这个数组进行了结构 不会让从数组中获取值变得更容易吗?

提前致谢!

// 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)

最佳答案

  1. 不,不是真的。很多人会认为它们是数组,甚至将它们描述为数组,但实际上不是。 坐标 block 都是指针。它们仅分别存储 Rectint 的单个地址。

    但是,例如,当您执行 coordinates = new Rect[25]; 时,您将分配一个包含 25 个 Rect 的数组并设置指针 坐标 指向该数组中的第一个元素。因此,虽然坐标本身是一个指针,但它指向数组中的第一个元素。

    您可以像索引数组一样索引坐标 block 。例如,坐标[3]将访问您分配的矩形数组的第四个元素。它的行为与数组相同的原因是因为它实际上是相同的。例如,当您有一个实际的数组 arr 时,并且执行 arr[4] ,该数组首先会转换为指向其第一个元素的指针,然后进行索引.

  2. 不,这不是数组的数组。它的作用是在一个数组 (blocks[num]) 中查找一个值,并使用该值来索引下一个数组 (coordinates[blocks[num]])。因此,一个数组将索引存储到另一个数组中。

  3. 我会忽略这不会编译,但在这两种情况下,您都会将 int 传递给 Coords 函数。第一种情况看起来不正确,但也可能不是。它获取 blocks[i] 处的值,将其传递给函数,然后使用该值来索引 blocks 以获得另一个值,然后使用该另一个值来索引 坐标。在第二种情况下,您只需传递i,它用于索引 block ,为您提供一个用于索引坐标的值。

  4. 这是一个广泛的问题,如果不确切知道您想要简化什么并且没有看到一些真正有效的代码,我认为我无法回答。

关于c++ - C++数组结构的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24829792/

相关文章:

c++ - 将数组分成两组?

c++ - 使用 Boost 基本截止时间计时器来调用类方法

c++ - 在 seekg() 上读取文件时崩溃

java - byte array[] to byte 在java中有可能吗?

c - 直方图,频率的计算

c++ - 如何在 C++ 中访问非静态数据成员

c++ - 如何知道C和C++中数据和代码的虚拟地址?

c - 不完整数组类型的 p[0] 和 *p 等价

c - 变量周围的运行时检查失败堆栈已损坏

c++ - 如何将一系列计算值发送到数组中?