[C] Działanie na kopii tablicy w funkcji
Ostatnio zmodyfikowano 2015-01-03 18:21
antonio12 Temat założony przez niniejszego użytkownika |
[C] Działanie na kopii tablicy w funkcji » 2015-01-03 16:32:12 Jeśli mam wywołaną tablicę w funkcji to działam na jej kopii ? Po wyjściu z tej funkcji wartości tej tablicy powinny zostać usunięte ? Bo mam taki program, ale wygląda jakby działał na oryginalnej tablicy: #include<stdio.h>
float funkcja( float tab[], int n ); int main() { float tablica[ 4 ] = { 0, 1, 2, 3 }; funkcja( tablica, 4 ); int j; for( j = 0; j < 4; j++ ) { printf( "%f\n", tablica[ j ] ); } return 0; } float funkcja( float tab[], int n ) { int i; for( i = 0; i < n; i++ ) { tab[ i ] = 1; } } |
|
Kaikso |
» 2015-01-03 16:56:49 Tablice są ściśle powiązane ze wskaźnikami, przekazując tablice do funkcji przekazujesz jedynie jej adres. float funkcja( float tab[], int n );
float funkcja( float * tab, int n );
A więc operujesz na oryginalnej tablicy, a nie jej kopi. |
|
antonio12 Temat założony przez niniejszego użytkownika |
» 2015-01-03 16:58:14 a da się jakoś operować na kopii ? |
|
Monika90 |
» 2015-01-03 16:59:59 To: float funkcja( float tab[], int n );
znaczy dokłądnie to samo co to: float funkcja( float * tab, int n );
Przekazujesz do funkcji wskaźnik do piewszego elementu tablicy, dlatego funkcja może zmienić ten element i kolejne też. Żeby funkcja dostałą kopię tablicy można ją umieścić wewnątrz struktury i przkazać strukturę przez wartość. |
|
1aam2am1 |
» 2015-01-03 17:42:45 @up nie do końca funkcja( float tab[], int n );
funkcja( const float * tab, int n );
|
|
DejaVu |
» 2015-01-03 17:46:08 @up: Poniższy kod kompiluje się, więc nie jest to const. void funkcja( int tab[] ) { * tab = 0; tab = nullptr; }
|
|
Monika90 |
» 2015-01-03 17:51:09 Żeby funkcja dostałą kopię tablicy można ją umieścić wewnątrz struktury i przkazać strukturę przez wartość. |
Można też alokować w funkcji pamięć na nową tablicę i skopiować do niej zawartość oryginału |
|
1aam2am1 |
» 2015-01-03 17:59:14 @DejaVu void funkcja( const float * tab, int n );
Ten const nie wskazuje na to że wskaźnik nie może zmienić obiektu On mówi źe wskazuje na tablicy (według myślenia autora funkcji powinien wskazywać na tablice nie na obiekt) (tak właściwie on nic nie robi) Edit. Pomyłka racja mówi że nie można modyfikować. |
|
« 1 » 2 |