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: 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ę #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. |
|
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 #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; }
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-17 17:03:28 No ale w tym przypadku 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") |
|
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?" |
|
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]). |
|
mateczek |
» 2016-09-17 18:00:30 może ten kod ci pomoże w zrozumieniu. Jak lubisz rozkminkę o wskaźnikach #include <iostream> using namespace std; struct czlowiek { string imie; int wiek; }; int main() { czlowiek * osoba = new czlowiek; osoba->imie = "ktos"; cout << endl; cout << osoba->imie << endl; cout <<( * osoba ).imie << endl; cout << osoba[ 0 ].imie << endl; int liczby[ 4 ] = { 7 }; int * wsk = liczby; wsk[ 0 ] = 8; *( wsk + 3 ) = 9; cout <<* wsk << " " << wsk[ 3 ] << endl; if( & liczby[ 0 ] == liczby ) { cout << "to je to samo!!!!!!!!!!!!!!!!!!" << endl; } if( & liczby[ 1 ] ==( liczby + 1 ) ) { cout << "to je to samo!!!!!!!!!!!!!!!!!!" << endl; } }
|
|
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. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-17 18:49:41 Aaaa... dzięki ;) Temat zamykam |
|
« 1 » |