Czyszczenie tablicy funkcją.

0

Cześć, męczę się z wyczyszczeniem tablicy za pomocą funkcji. Wiem, że trzeba do tego użyć wskaźnika jak w przypadku zmiennych:

#include <iostream>
using namespace std;
void a1 (int* a){
    *a=0;
}
int main()
{
    int liczba = 10;
    cout << liczba << endl;
    a1 (&liczba);
    cout << liczba << endl;
    return 0;
}

Ale za chiny ludowe nie mogę tego efektu przenieść na tablice. :/ W tym co napisałem co chwilę wywala mi błąd przy wywołaniu funkcji :/ Robię przy tym jakiś błąd, czy totalnie źle to robię?

#include <iostream>
using namespace std;
void a1 (int* a[]){
    for (int i=0; i<=2; i++){
        *a[i] = 0;
    }
}
int main()
{
    int liczba[3];
    liczba[0] = 10;
    liczba[1] = 20;
    liczba[2] = 30;
    for (int i=0; i<=2; i++){
        cout << liczba[i] << endl;
    }
    cout << endl;

    a1 (&liczba[]);

    for (int i=0; i<=2; i++){
        cout << liczba[i] << endl;
    }
    return 0;
}
0

A co to niby jest

&liczba[]

? o_O
Podaj do funkcji adres pierwszego elementu tablicy i tyle, czyli samo "liczba", a w funkcji jako argument przyjmuj zwykłe int* i wykonuj operacje a[i]=0

1
void a1 (int *a, size_t count){
    for (size_t i = 0; i<count; i++)
        a[i] = 0;
}

...

a1(liczba, 3);
2

Możesz też wykorzystać to, co C++ ma do zaoferowania: bibliotekę standardową. Do tego co chcesz zrobić nada się std::fill lub std::fill_n.
Np.

std::fill_n(liczba, 3, 0);
0
Azarien napisał(a):
void a1 (int *a, size_t count){
    for (size_t i = 0; i<count; i++)
        a[i] = 0;
}

...

a1(liczba, 3);

A jak to zamienić na tablice dwuwymiarową?

Ja zrobiłem:

include <iostream>
using namespace std;
void a1 (int *a, size_t count, size_t jend){
    for (size_t i = 0; i<count; i++){
        for (size_t j =0; j<jend; j++){
            a[j][i]=0;
        }
    }
}
int main()
{
    int liczba[3][2];
    liczba[0][0] = 10;
    liczba[1][0] = 20;
    liczba[2][0] = 30;

    liczba[0][1] = 40;
    liczba[1][1] = 50;
    liczba[2][1] = 60;

    for (int i=0; i<2; i++){
        for (int j=0; j<3; j++){
            cout << liczba[j][i] << " ";
        } cout << endl;
    }
    cout << endl;

    a1(liczba, 2, 3);

    for (int i=0; i<2; i++){
        for (int j=0; j<3; j++){
            cout << liczba[j][i] << " ";
        } cout << endl;
    }
    return 0;
} 

i nie działa ;/

0

Nie możesz tak zrobić bo kompilator nie wiedziałby jak policzyć która komórka pamięci to [i][j] bo do tego potrzeba mu informacji o tym ile elementów ma wiersz. Musiałbyś tu mieć

a[i*size+j] = 0

albo zrobić z tego tablicę alokowaną dynamicznie i w funkcji mieć int**

1 użytkowników online, w tym zalogowanych: 0, gości: 1