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

Czym właściwie jest nazwa tablicy i nazwa elementu tablicy.

Ostatnio zmodyfikowano 2016-09-17 18:49
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
Czym właściwie jest nazwa tablicy i nazwa elementu tablicy.
» 2016-09-17 16:28:54
Witam. Wszyscy wiemy, że taki zapis:
C/C++
int * wsk;
int tablica[ 10 ];
wsk = tablica;

oznacza, ze wskaźnikiem wskazujemy na element zerowy tablicy, gdyż nazwa tablicy jest równocześnie adresem jej zerowego elementu.
Ale co jeśli mamy taką funkcję
C/C++
#include <iostream>
using namespace std;
void funkcja( int * wsk )
{
    * wsk += 5;
    cout <<* wsk;
}

int main()
{
    int tablica[ 10 ];
    tablica[ 5 ] = 5;
    funkcja( & tablica[ 5 ] );
   
}
Pragnę zauważyć, że nie podajemy tu wskaźnika, tylko adres 5 elementu. Czy w takim razie argumentem funkcji jest jakiś adres czy wskaźnik? Czym właściwie jest ten adres 5 elementu?
Wiem, że pytanie może wydawać się głupi ale nurtuje mnie. Z góry dziękuję za odpowiedź :)

PS. i co jest właściwie lepszego w argumencie który jest wskaźnikiem na element tablicy od przesyłania normalnie tablicy? Przecież i tu i tu pracujemy (funkcja pracuje) na oryginałach.
P-151782
mateczek
» 2016-09-17 16:42:38
Jak potrzebujesz zmienić element, to podajesz wskaźnik na element. A jak chcesz obrobić tablicę to przekazujesz wskaźnik na zerowy element i rozmiar tablicy.
Zawsze można skorzystać z kontenerów zamiast klasycznych tablic
C/C++
#include <iostream>
using namespace std;
void funkcja( int * wsk )
{
    * wsk += 5;
}
void funkcja2( int * wsk, int nr )
{
    wsk[ nr ] += 5;
}

int main()
{
    int tablica[ 10 ] { 0 };
    tablica[ 5 ] = 5;
    funkcja( & tablica[ 5 ] );
    cout << tablica[ 5 ] << endl;
    funkcja2( tablica, 5 );
    cout << tablica[ 5 ] << endl;
}
P-151783
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-17 17:03:28
No ale w tym przypadku
C/C++
void funkcja( int tab[], int x )
{
    tab[ x ] += 5;
    cout << tab[ x ];
}

int main()
{
    int tablica[ 10 ];
    tablica[ 5 ] = 5;
    funkcja( tablica, 5 );
    cout << "teraz tab x = " << tablica[ 5 ];
   
}

też mogę sobie zmieniać elementy tablicy za pomocą 'x'. Więc gdzie różnica między powyższym kodem a tym, który podałeś (chodzi mi o funkcję "funckja2")
P-151784
pekfos
» 2016-09-17 17:19:32
W definicji argumentów funkcji, nie ma różnicy między zapisami int* t i int t[].

Pragnę zauważyć, że nie podajemy tu wskaźnika, tylko adres 5 elementu. Czy w takim razie argumentem funkcji jest jakiś adres czy wskaźnik?
"Pragnę zauważyć, że nie podajemy tu inta, tylko 5. Czy w takim razie argumentem funkcji jest jakieś 5 typu int, czy int o wartości 5?"
P-151785
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-17 17:55:28
"Pragnę zauważyć, że nie podajemy tu inta, tylko 5. Czy w takim razie argumentem funkcji jest jakieś 5 typu int, czy int o wartości 5?"
Ale za pomocą '&' (&tab[5]) podajemy adres 5 elementu? Pisząc, że nie podajemy tu wskaźnika miałem na myśli, że podajemy tu adres (&) 5 elementu tablicy (tab[5]).
P-151786
mateczek
» 2016-09-17 18:00:30
może ten kod ci pomoże w zrozumieniu. Jak lubisz rozkminkę o wskaźnikach
C/C++
#include <iostream>
using namespace std;
struct czlowiek {
    string imie;
    int wiek;
};
int main()
{
    czlowiek * osoba = new czlowiek;
    osoba->imie = "ktos";
    cout << endl;
   
    // jak  można wyłuskać wskaźnik
    cout << osoba->imie << endl;
    cout <<( * osoba ).imie << endl;
    cout << osoba[ 0 ].imie << endl;
   
    //tablica 4 elementowa
    int liczby[ 4 ] = { 7 };
    int * wsk = liczby; //wskaźnik na int ustawiony na tablice
    //int *wsk =&liczby[0]; // to samo co wyżej
   
    //*wsk=8;
    wsk[ 0 ] = 8; //to samo co wyżej
   
    //wsk[3]=9;
    *( wsk + 3 ) = 9; //to samo co wyżej
    cout <<* wsk << " " << wsk[ 3 ] << endl;
   
   
    //jescze jeden test
    if( & liczby[ 0 ] == liczby ) {
        cout << "to je to samo!!!!!!!!!!!!!!!!!!" << endl;
    }
    if( & liczby[ 1 ] ==( liczby + 1 ) ) {
        cout << "to je to samo!!!!!!!!!!!!!!!!!!" << endl;
    }
   
}

P-151787
pekfos
» 2016-09-17 18:04:34
Pisząc, że nie podajemy tu wskaźnika miałem na myśli, że podajemy tu adres (&)
Adres to jest wskaźnik.
P-151788
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-09-17 18:49:41
Aaaa... dzięki ;)
Temat zamykam
P-151789
« 1 »
  Strona 1 z 1