Передать массив в качестве аргумента - PullRequest
0 голосов
/ 01 марта 2012

У меня есть массив:

int *BC_type_vel;
BC_type_vel = new int [nBou+1];

и функция:

void BC_update (const int type[], float X[]) {

for (int i=1; i<=nBou; ++i) {

    if (type[i] == 1) {

        std::cout << i << "   " << type[i] << "   " << BC_type_vel[i] << std:: endl;

        for (int e=PSiS[i]; e<PSiE[i]; ++e) {               

            X[e] = X[elm[e].neigh[0]];
        }
    }
}

}

Я называю это как:

BC_update(BC_type_vel,U);

Это дает вывод как:

1   1   0
2   1   0
3   1   0
4   1   1
5   1   0

Так почему аргумент функции не копирует значения должным образом?

1 Ответ

1 голос
/ 01 марта 2012

Я попробовал следующий код с gcc:

int *BC_type_vel;
int nBou = 10;

void BC_update (const int type[]) {
    for (int i=1; i<=nBou; ++i) {
        if (type[i] == 1)
            std::cout << i << "   " << type[i] << "   " << BC_type_vel[i] << std:: endl;
    }
}

int main () {
    int i;

    BC_type_vel = new int [nBou+1];
    for (i=1; i<=nBou; ++i) {
        if (i%2 == 0)
            BC_type_vel[i] = i;
        else
            BC_type_vel[i] = 1;
    }
    BC_update(BC_type_vel);

    return 0;
}

, и он дает ожидаемые результаты:

1   1   1
3   1   1
5   1   1
7   1   1
9   1   1

Так что проблема в другом месте вашего кода.Вы должны предоставить нам все остальное.

...