C ++引用结构数组

时间:2014-04-13 00:25:53

标签: c++ arrays struct

我是使用C ++进行复杂编程的新手。我一直在筛选通过我的部门传下来的一些遗留的,没有注释的学术代码,我偶然发现了一些我不知道如何谷歌的东西。我不理解引用结构数组的语法。

以下是我正在努力的修剪版本:

typedef struct
{
    double x0,y0;
    double r;
} circle;

double foo()
{
    int N = 3;
    double mtt;
    circle circles[N];

    for (int i = 0; i < N; i++)
    {
        mtt += mtt_call_func((circles+i), N);
    }

    return mtt;
}

(circles+i)在这种情况下意味着什么?

编辑:该函数应该有(circles + i),而不是(circle + i)

4 个答案:

答案 0 :(得分:3)

circles+i相当于&circles[i]。这就是指针算术在C ++中的工作原理。

为什么有指针?好吧,当你在&circlessizeof circles以外的上下文中给出数组的名称时,会创建一个指向数组第一个成员的临时指针。这就是你的代码的工作原理。数组是C ++中的二等公民;它们的行为不像是物体。

(我假设你的circle+icircles+i的拼写错误,正如其他人所建议的那样)

答案 1 :(得分:2)

circle+i表示“取一个指针圈并按其指向的对象大小移动它”。指针是涉及的,因为数组的名称是指向它的第一个元素的指针。

除此之外,你应该初始化循环中使用的整数计数器变量:

for (int i = 0; i < N; i++)
           ^^^^
{
    mtt += mtt_call_func( ( circles + i), N);
                                  ^ // typo
}

答案 2 :(得分:1)

在C中,与在C ++中一样,将数组视为指针是合法的。因此,circles+ii的{​​{1}}大小增加到circle的地址。

circles可能更清楚;在这种形式中,表达式更明显地产生一个指向数组中第i个结构的指针。

答案 3 :(得分:0)

你在堆栈中声明的每个向量它实际上是指向向量的第一个索引0的指针。使用i,您可以从索引移动到索引。因此,(circles+i)相当于&circles[i]

&表示变量的地址。在函数调用中,您发送一个存储变量地址的指针,因此如果您要更改为&,则需要circles[i],因为您需要i的地址向量的索引圈来运行你的函数。

有关指针,向量和结构的更多信息,请查看:http://pw1.netcom.com/~tjensen/ptr/pointers.htm

它应该通过地面基础来覆盖你。