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

[C] Działanie na kopii tablicy w funkcji

Ostatnio zmodyfikowano 2015-01-03 18:21
Autor Wiadomość
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:

C/C++
#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;
    }
}
P-123943
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.
C/C++
float funkcja( float tab[], int n );
// to to samo co to
float funkcja( float * tab, int n );
A więc operujesz na oryginalnej tablicy, a nie jej kopi.
P-123945
antonio12
Temat założony przez niniejszego użytkownika
» 2015-01-03 16:58:14
a da się jakoś operować na kopii ?
P-123946
Monika90
» 2015-01-03 16:59:59
To:
C/C++
float funkcja( float tab[], int n );
znaczy dokłądnie to samo co to:
C/C++
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ść.
P-123947
1aam2am1
» 2015-01-03 17:42:45
@up nie do końca
C/C++
funkcja( float tab[], int n );
//znaczy dokładnie
funkcja( const float * tab, int n );
P-123959
DejaVu
» 2015-01-03 17:46:08
@up: Poniższy kod kompiluje się, więc nie jest to const.
C/C++
void funkcja( int tab[] )
{
    * tab = 0;
    tab = nullptr;
}
P-123960
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
P-123961
1aam2am1
» 2015-01-03 17:59:14
@DejaVu
C/C++
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ć.
P-123963
« 1 » 2
  Strona 1 z 2 Następna strona