Jak przekazać do funkcji dynamicznie stworzoną tablicę?
nazwa_funkcji( *tabela )
jak sie myle to mnie poprawcie
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';
}
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 :/
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 );
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.
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;
}
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 :)
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]) ;>
Nareście działa, dzieki chłopaki :)
Zupełnie inaczej niż w PHP czy Javie, no ale ważne że chodzi :)