[c++] dynamiczna tablica

0

Jak przekazać do funkcji dynamicznie stworzoną tablicę?

0

nazwa_funkcji( *tabela )

jak sie myle to mnie poprawcie

0

Tak samo jak kazdy inny parametr.
Jezeli masz tablice charow:
char* Tab;

to w funkcji powinienes:
void f(char* tab){
for(int i=0;i<DlugoscTablicy;i++)
tab[i] = 'a';
}

0

no wlasnie mi nie zabardzo wychodz, moze dlatego(sorry, ze nie napisałem na poczatku), ze jest to tablica wielo wymiarowa i tworzona dynamicznie, wtedy sa już błedy :/

1

hmm a jak alokujesz ta wielo wymiarowa tablice ?
w sumie metody sa dwie:

int ***tab;
tab = (int***)malloc( sizeof( int ) * 4 * 5 * 6 );

przez co otrzymujesz tablice 3 wymiarowa tab do ktorej zlekka trudno sie odwolac ;>

((*int)[4][5][6]tab)[2][3][4] = 12;

mam nadzieje jednak ze tak nie robisz ;> jesli jednak tak robisz to napisz ;>

int ***tab, i, j;
tab = (int***)malloc( sizeof( int** ) * 4 );
for( i = 0; i < 4; i++ ) 
{
  tab[ i ] = (int**) malloc( sizeof( int* ) * 5 );
  for( j = 0; j < 5; j++ )
    tab[ i ][ j ] = (int*) malloc( sizeof( int ) * 6 );
}

czyli tworzysz w sumie tablice pointerow do tablic pointerow do elementow ;>
wtedy problemu nie masz zadnego ;>

int asdf( int ***x )
{
  return x[ 1 ][ 2 ][ 3 ]++;
}
asdf( tab );
0

Chyba troche przesadziłem :)
Chodzi mi o dwu wymiarową tablicę:

int tab[max][6];

gdzie max jest liczba wierszy do utworzenia dynamicznego.
I do tego pozniej chce napisać funkcje, która zsumuje wszystkie wartosci z np. 5 kolumny. Wiemy, że dane są typu int.

1

a ;>
trzeba bylo tak Od razu...
uwaga przed czytaniem:
int *a[5]; to NIE to samo co int (*b)[5];
to pierwsze to Tablica 5ciu wskaznikow do inta
a to drugie to wskaznik do 5cio-elementowej tablicy intow

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void
wypisz( int (*co)[ 6 ], int max )
{
  int i, j;
  for( j = 0; j < max; j++ )
  {
    for( i = 0; i < 6; i++ )
      printf( "%3i ", co[ j ][ i ] );
    putchar( '\n' );
  }
}

int
main( void )
{
  int (*asdf)[6];
  int max = 5, i, j;
  asdf = malloc( sizeof( int ) * 6 * max );
  
  for( j = 0; j < max; j++ )
    for( i = 0; i < 6; i++ )
      asdf[ j ][ i ] = i*j;
  wypisz( asdf, max );
  
  free( asdf );
  
  return 0;
}
0

Sorry, ale ten kod kompiluje i sa jakies errory. Mam dev-cpp, a wlasnie nie moge pojac i go poprawić :)

"czepia się" tego:

asdf = malloc( sizeof( int ) * 6 * max );

invalid conversion from void*' to int (*)[6]'

ale ja jestem chamski.... ;)
dzieki za pomoc :)

1

huh? dziwne.. kompilowalem na mingwowym gcc i z -Wall i -pedantic nie wywalil bledu ;>> (sam sie zdziwilem ;p)
ale skoro wywala to daj mu przed malloc (int(*)[6]) ;>

0

Nareście działa, dzieki chłopaki :)

Zupełnie inaczej niż w PHP czy Javie, no ale ważne że chodzi :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1