C ++中的数组问题

时间:2010-03-24 17:03:23

标签: c++ arrays

要在xth位置访问数组indice,我们可以使用某种插图,如下所示

#include<iostream>
using namespace std;
int main(){
    float i[20];
    for(int j=0;j<=20;j++)
        i[j]=0;
}

但是下面的代码不起作用

#include<iostream>

using namespace std;

float oldrand[55];
int jrand;

void advance_random(){
    int j1;
        float new_random;

    for(j1=0;j1<=23;j1++){
        int temp = j1+30;
        new_random = (oldrand[j1]) - (oldrand[temp]);
        if(new_random <0.0)
            new_random = new_random+1;
        oldrand[j1] = new_random;
    }
    for(j1=24;j1<=54;j1++){
        new_random[j1] = oldrand[j1] - oldrand[j1-23];
        if(new_random[j1]<0.0)
            new_random[j1] = new_random + 1;
        oldrand[j1]=new_random;
    }
}

我收到以下错误

ga.cpp:20: error: invalid types ‘float[int]’ for array subscript
ga.cpp:21: error: invalid types ‘float[int]’ for array subscript
ga.cpp:22: error: invalid types ‘float[int]’ for array subscript

我无法在代码中找到错误请帮帮我

8 个答案:

答案 0 :(得分:7)

new_random未声明为浮点数组,它被声明为浮点数。编译器试图告诉你不能索引到浮点数。

答案 1 :(得分:5)

正如其他人所说,new_random未声明为数组,因此编译错误。

此外,使用这种类型的循环

float i[20];
for(int j=0;j<=20;j++)
    i[j]=0;

你将耗尽数组边界并获得未定义的行为。正确的形式是

for(int j=0;j<20;j++)

这是因为在C / C ++中,数组从0开始索引,因此包含20个元素的数组包含从0到19索引的元素。

答案 2 :(得分:0)

oldRand是一个数组new_random只是一个浮点数,所以

new_random[j1]

无效。

答案 3 :(得分:0)

您将new_random声明为float,而不是float数组,并且正在尝试使用访问它的数组方法(new_random [j1])。

答案 4 :(得分:0)

第一段代码的这一部分是错误的:

int main(){
    float i[20];
    for(int j=0;j<=20;j++)
        i[j]=0;
}

该循环的最后一次迭代将分配给不存在的i[20](因为float i[20]定义了从i[0]i[19]的浮点数组。正确的方法是:

int main(){
    float i[20];
    for(int j=0;j<20;j++)
        i[j]=0;
}

请注意j<20而非j<=20

答案 5 :(得分:0)

因为当您将变量new_random声明为普通浮点数时,将其视为数组。

答案 6 :(得分:0)

new_random不是数组。您正试图将其视为以下行中的一个:

new_random[j1] = oldrand[j1] - oldrand[j1-23];
        if(new_random[j1]<0.0)
            new_random[j1] = new_random + 1;

答案 7 :(得分:0)

这些是导致问题的原因:

for(j1=24;j1<=54;j1++){ 
    new_random[j1] = oldrand[j1] - oldrand[j1-23]; 
    if(new_random[j1]<0.0) 
        new_random[j1] = new_random + 1; 
    oldrand[j1]=new_random; 
} 

如前所述,“new_random [j1] ”是非法的 - 只要删除“[j1]”就应该正常工作:

for(j1=24;j1<=54;j1++){ 
    new_random = oldrand[j1] - oldrand[j1-23]; 
    if(new_random<0.0) 
        new_random = new_random + 1; 
    oldrand[j1]=new_random; 
}