关于C ++数组的新手问题

时间:2011-05-26 17:26:11

标签: c++ arrays

我正在完成其他人编写的演示程序,我对他们正在使用的一些语句感到很困惑。我不太熟悉C ++(更多的是使用Obj-C),我不确定这是否是有效的代码。举个例子,如下:(评论是我的)

int main(int argv, char** argc)
{
    int perm [20]; //OK, so declare an array of ints, size = 20
    for (int i=0; i < 20; i++)
        perm = i; //whaaaaa??? thought you need to specify an element to assign to an array...
}

这是一个例子 - 我的编译器抛出一个“不兼容的类型,将'int'分配给'int [20]'错误,但显然其他人已经能够编译该程序。我很疯狂,或者这是不好的代码?

这是另一件我不理解的文章:

int d[20] = {0}; //OK, another int array of size 20, initialized to 0's
for (int i = 1; i < n; i++)
{
    d = d[i - 1]; //this I don't get - assign the array to one of its own elements??
    if (invperm[i - 1] < b)
        d++;  //this would just increment to the next element? 
}

我怀疑错误是我的理解之一,好像代码很糟糕,其他人会评论这个事实......如果有人有一个很好的解释和/或资源,我可以阅读以理解这一点,我非常感激!

谢谢!

* 已添加 *

在回答下面的答案时,我确实复制/粘贴了那段代码,它看起来完好无损......我只能假设原作者发布它时,它会以某种方式破坏它。感谢您的回复,我很高兴我有正确的理解,我会尝试联系作者,看看那里是否有一个未被破坏的副本!

3 个答案:

答案 0 :(得分:8)

所有这些例子都是完全错误的。当您从任何地方复制代码时,您似乎丢失了[i]

我已经看到类似于通过信使程序发送的代码,它将某些文本处理为表情,并将其替换为不会被复制为文本的图像,而是被删除。

答案 1 :(得分:3)

您的理解很好,代码完全没有意义。

d++;  //this would just increment to the next element?

如果d是指针的话。但是,由于d是一个数组,所以它只是非法的。

答案 2 :(得分:0)

这肯定是复制/粘贴错误。 在涉及Lua脚本的游戏技术项目中,我已经屈服于复制/粘贴代码的诱惑。如果Lua脚本失败,则没有反馈/输出指示某些内容失败(这非常令人沮丧)。经过几个小时的调试后,我意识到我的脚本正在使用“智能引号”。

虽然这段代码被破坏了,但它仍然可以教你一些关于C ++的东西。

int perm [20];

cout << endl << perm << endl;
cout << endl << &perm[0] << endl;

'perm'返回数组第一个元素的内存地址。因此,当您尝试在主循环(20次)中将'i'分配给'perm'时,您现在将知道您正在尝试将整数分配给内存地址,因此不兼容的类型错误。

然而第二部分却被彻底打破了,我无法从中学到很多东西:P。

我在一个示例程序中添加了如何使用指针/数组:

#include <iostream>

using namespace std;

int main()
{
    int d[20] = {0}; // 20 ints, set to 0
    int * ptr = d; // points to d[0]'s memory address

    for(int i = 0; i < 20; i++)
    {
        d[i] = 0 + i; // set array values
    }

    for(int i = 0; i < 20; i++)
        {    
                // iterates through d and prints each int
        cout << endl << "d[i]: " << d[i] << endl;
                // dereferences the ptr to get the same int
                // then incraments the position of the pointer for next time
        cout << endl << "*ptr++: " << *ptr++ << endl;
    }

    getchar();

    return(0);
}