我正在完成其他人编写的演示程序,我对他们正在使用的一些语句感到很困惑。我不太熟悉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?
}
我怀疑错误是我的理解之一,好像代码很糟糕,其他人会评论这个事实......如果有人有一个很好的解释和/或资源,我可以阅读以理解这一点,我非常感激!
谢谢!
* 已添加 *
在回答下面的答案时,我确实复制/粘贴了那段代码,它看起来完好无损......我只能假设原作者发布它时,它会以某种方式破坏它。感谢您的回复,我很高兴我有正确的理解,我会尝试联系作者,看看那里是否有一个未被破坏的副本!
答案 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);
}