Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odbieranie wskaźnika tablicy przez funkcje

Ostatnio zmodyfikowano 2013-10-26 14:40
Autor Wiadomość
m7s1994
Temat założony przez niniejszego użytkownika
Odbieranie wskaźnika tablicy przez funkcje
» 2013-10-25 13:02:47
Witam : )

Mam problem z kompilacją załączonego programu.
Nie do końca rozumiem przekazywanie wskaźników tablicy do funkcji i nie wiem dlaczego mój program się nie kompiluje.


C/C++
#include<iostream>
using namespace std;

void funkcja( int * tablica[] )
{
    * tablica[ 1 ] = 7;
    * tablica[ 2 ] = 7;
}
int main()
{
    int tab[] = { 1, 2, 3, 4, 5 }, a = 5;
    funkcja( tab );
    cout << tab[ 0 ] << " " << tab[ 1 ] << endl;
    return 0;
}

Prosze o pomoc
P-94509
akwes
» 2013-10-25 13:10:16
Pewnie kompilator Ci mówi co robisz źle. Wystarczy przeczytać treść błędu kompilacji.
P-94510
m7s1994
Temat założony przez niniejszego użytkownika
» 2013-10-25 13:17:02
Tak, mówi, ale nie bardzo to rozumiem dlatego pytam jak należy poprawnie przekazać wskaźnik tablicy do funkcji
P-94511
akwes
» 2013-10-25 13:22:39
Jeżeli ktoś Ci powie wprost, to pomoże to tylko raz. Jeżeli sam się nauczysz to będziesz wiedział na przyszłość. Co wypisuje kompilator i jak to rozumiesz?
P-94512
m7s1994
Temat założony przez niniejszego użytkownika
» 2013-10-25 13:39:39
Error jest w linijce 12 'cannot convert 'int*' to 'int**' for argument '1' to 'void funkcja(int**)'

Czy to nie jest przypadkiem tak że mój program próbuje przekazać wskaźnik do wskaźnika który nie istnieje?

W funkcja(int *tablica[]) powinienm poprostu zadeklarowac jakiś wskaźnik np *w zamiast *tablica[]?
P-94513
akwes
» 2013-10-25 14:35:58


'void funkcja(int**)'

Funkcja chce dostać wskaźnik na wskaźnik int.



'cannot convert 'int*' to 'int**'

Kompilator stara się dopasować to co chcesz wysłać (wskaźnik na int) do wskaźnika na wskaźnik do int, czego zrobić nie potrafi. Jeżeli nie widzisz błędu to znaczy, że musisz sobie powtórzyć wskaźniki » Kurs C++Wskaźniki lekcja a póki co zapoznaj się z » Kurs C++ » Poziom 2Przekazywanie tablic jednowymiarowych do funkcji lekcja.


P-94514
m7s1994
Temat założony przez niniejszego użytkownika
» 2013-10-26 13:38:31
Dziekuję za wytłumaczenie, juz o wiele jasniej :)

Ale mam kolejny problem z tablica dwuwymiarową;
C/C++
#include<iostream>
using namespace std;

void funkcja( int * w[ 3 ] )
{
    //dzialanie funkcji
}

int main()
{
    int tab[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
    funkcja( tab );
    return 0;
}

W materiałach z wykładu mam zapisane że
C/C++
void funkcja( int tablica[][ 3 ] );
void funkcja( int * tablica[ 3 ] );

są to równoważne deklaracje funkcji, a wywołać je można poprzez:
C/C++
int t[ 10 ][ 3 ];
funkcja( t );

Podobnie napisałem mój program ale się nie kompiluje
(cannot convert 'int (*)[3]' to 'int**' for argument '1' to 'void funkcja(int**)')

Myślałem że działa to w taki sposób że przekazuje adres pierwszego elementu(o indeksie 0) w pierwszym wierszy(indeks 0), no ale niestety nie działa w ogóle, a ja kompletnie nie mam pomyslu jak przekazać taka tablice do funkcji z wykorzystaniem wskaznika, a materialu z wykladu w niczym nie pomagaja.
Prosiłbym więc o pomoc w zrozumieniu przekazywania w taki sposób tablic wielowymiarowych.
P-94599
DejaVu
» 2013-10-26 14:39:28
C/C++
void funkcja( int w[][ 3 ] ) { }

int main()
{
    int tab[ 2 ][ 3 ];
    funkcja( tab );
    return 0;
}
Jak widać zapisy nie są równoważne, skoro jeden zapis działa, a drugi nie :)
P-94602
« 1 » 2
  Strona 1 z 2 Następna strona