[C++]Przkazanie przez referencje
Ostatnio zmodyfikowano 2016-05-29 01:31
koniol Temat założony przez niniejszego użytkownika |
[C++]Przkazanie przez referencje » 2016-05-24 19:41:05 Wyświetla mi sie blad nie mam pojecia dlaczego Chce przekazać oryginalna tablice do funkcji wypisz_tab i tam ja wyswietlic using namespace std; string tab[ 9 ];
void wypisz_tab( string & tab[] ) { for( int i = 1; i <= 9; ++i ) { tab[ i ] = i + 48; if(( i - 1 ) % 3 == 0 ) cout << endl; cout << tab[ i ]; } }
int main( int argc, char ** argv ) { wypisz_tab( tab ); return 0; }
|
|
mateczek |
» 2016-05-24 19:45:41 musisz napisać co chcesz zrobić bo kod jest bez sensu !!! //edit #include<string> #include<iostream> using namespace std;
void wypisz_tab( string tab[] ) { for( int i = 1; i < 6; ++i ) { cout << tab[ i ] << endl; } tab[ 2 ] = "xxxx"; }
int main() { string tab[ 6 ] { "mała", "ala", "ma", "kota", "a Alicja", "ma tygrysa" }; wypisz_tab( tab ); cout << tab[ 2 ] << endl; return 0; }
|
|
carlosmay |
» 2016-05-24 20:00:57 Jeśli chcesz przeliterować słowo to przekaż zmiana string. String sam w sobie jest tablicą znaków. |
|
mateczek |
» 2016-05-24 20:33:01 #include<iostream> using namespace std;
void stworz_tab( char * & t ) { t = new char[ 6 ]; for( int i = 0; i < 6; i++ ) { t[ i ] = i + '0'; } }
int main() { char * tab; stworz_tab( tab ); for( int i = 0; i < 6; i++ ) { cout << tab[ i ] << " "; } delete[] tab; }
|
|
Zibby |
» 2016-05-27 23:31:23 rozumiem, że chcesz, żeby funkcja wypełniła tablicę i żebyś mógł jej użyć w main? powinno działać coś takiego
void wypisz_tab( string (& tab)[9] )
btw jak masz tablicę wielowymiarową to nawet w zwykłym przekazaniu jej do funkcji powinieneś określić jej rozmiar |
|
mateczek |
» 2016-05-29 01:31:03 @Zibby 1. Aby funkcja mogła wypełniać tablicę i abyś mógł tej tablicy używać w "main" nie trzeba wcale referencji wystarczy zwykłe przekazanie void wypisz_tab( string tab[] )
2. Jedyny racjonalny sposób użycia referenci w stosunku do tablicy jest wówczas, gdy chcesz stworzoną w funkcji tablice przypisać do wskaźnika // napisałem to dwa posty wyżej. 3. Co do funkcji i podawania rozmiaru tablicy 2d. To wynika to z faktu że tablica w pamięci jest liniowa dla kompilatora wygląda tak 1 2 3 4 5 6 kompilator chcąc pobrać element musi znać liczbę kolumn aby wiedzieć jak taką tablice zrozumieć !!! 1 2 _ 3 4 _ 5 6 //tablica [3][2] dla tak rozumianej tablicy element[1][1] to cyfra 4 1 2 3 _4 5 6 //tablica [2][3] dla tak rozumianej tablicy element[1][1] to cyfra 5
kompilator wylicza adres elementu w sposób jak następuje: adres[wiersz][kolumna] = wiersz*liczbaKolumn+kolumna dla elementu[1][1] i liczby kolumn=2 1*2+1=3 - będzie to trzeci element tablicy liniowej dla elementu[1][1] i liczby kolumn=3 1*3+1=4 - będzie to czwarty element tablicy liniowej
minimum przy przekazaniu do funkcji to poniższa deklaracja. void zamiana( int tab[][ 3 ] ) { } |
|
« 1 » |