2011-05-26 86 views
1

我正在通过其他人编写的演示程序工作,我对他们正在使用的一些陈述感到非常困惑。我不是很熟悉C++(更多的是Obj-C),我不确定这是否是有效的代码。举个例子来说,以下内容:(评论是我的)关于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? 
} 

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

谢谢!

* 编辑补充 *

针对以下问题的答案,我并复制/粘贴代码,它看起来完好无损,我...我只能当原作者贴承担它,它以某种方式破坏它。感谢您的回复,我很高兴我有正确的理解,并且我会尝试联系作者,看看有没有一个没有损坏的副本在那里!

+1

到底从哪里你得到这个?它是直接复制和粘贴吗? – Bart 2011-05-26 17:30:36

回答

8

所有这些例子都是错误的。当你从任何地方复制代码时,看起来你丢失了[i]

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

+5

'[i]'和'[/ i]'可能会被某些程序当作* italic *的标记... – sth 2011-05-26 17:33:39

+0

这很可能,但解决方案是一样的:获取实际文件,不要复制和粘贴文本。 – Blindy 2011-05-26 17:34:31

+0

谢谢,看起来像代码的作者一定是复制/粘贴和[i]被视为一个HTML标记听起来就像发生了什么!我会联系他,看看他是否有原始文件... – Jim 2011-05-26 17:39:02

3

你的理解没问题,那代码完全没有意义。

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

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

+0

等待,是不是数组和指针基本相同? *开玩笑*! ;-) – fredoverflow 2011-05-26 19:42:49

0

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

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

int perm [20]; 

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

'perm'返回数组第一个元素的内存地址。所以当你试图在main for循环中将'i'赋值给'perm'(20次)时,你现在就会知道你正在试图给一个内存地址赋一个整数,因此是不兼容的类型错误。

然而,第二部分是严重破碎,我不能从这方面看出很多的学习: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); 
}