Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Cholo
    Registrato dal
    Aug 2002
    Messaggi
    680

    Passaggio array Multidimensionale in C

    Sapete dirmi se è possibile passare ad una funzione , tramite un puntatore o meno, un array multidimensionale ?

    Ci stò provando da un pò ma non ne vengo a capo

    Ciao

  2. #2
    ma.... se è a 2 dimensioni e lo vuoi passare x copia penso che basti passare un puntatore a un puntatore....

    int a[10][10];


    void funz(int **param);

    poi forse dovrai fare il casting quando chiami la funzione...

  3. #3
    Utente di HTML.it L'avatar di Cholo
    Registrato dal
    Aug 2002
    Messaggi
    680
    Già provato, da Warning in compilazione e coredump in esecuzione.

    Io non mi spiego perchè questo non funziona:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    
    void stampa(char *telf[]);    
    
    
    void stampa(char *telf[]) {    
    int i;
    
    for (i=0;i<3;i++)
            printf("tel%i: %s\n\n", i, telf[i]);
    
    }
    
    void main() {
    
    char tel [3][14];
    
    strcpy (tel[0], "0661564048");
    strcpy (tel[1], "0666397");
    strcpy (tel[2], "3297752447");
    
    stampa(tel); 
    
    }
    Mi sembra inappuntabile !!! NO !?!

  4. #4
    ma... stai chiedendo il passaggio di un array ad una funzione???

  5. #5
    In effetti e` la stessa cosa che avrei pensato io fino a 10 minuti fa, ovvero prima di vedere l`output in asm di quel listato.

    Guarda qui:

    codice:
    #include <stdio.h>
    #include <string.h>
    
    void stampa1( char telf[][ 14 ] )
    {
    	int i;
    
    	for( i = 0; i < 3; i++ )
    		printf( "tel%i: %s\n\n", i, telf[ i ] );
    }
    
    void stampa2( char* telf )
    {
    	int i;
    
    	for( i = 0; i < 3; i++ )
    		printf( "tel%i: %s\n\n", i, &telf[ i * 14 ] );
    
    /*	Alternativa:
     *		printf( "tel%i: %s\n\n", i, telf + i * 14 );
     */
    }
    
    void stampa3( char esempio[][ 2 ][ 3 ] )
    {
    	/* ... */
    }
    
    int main()
    {
    	char tel[ 3 ][ 14 ];
    	char esempio[ 1 ][ 2 ][ 3 ];
    
    	strcpy( tel[ 0 ], "0661564048" );
    	strcpy( tel[ 1 ], "0666397" );
    	strcpy( tel[ 2 ], "3297752447" );
    
    	stampa1( tel );
    	stampa2( ( char* ) tel );
    	stampa3( esempio );
    
    	return 0;
    }
    Come vedi, puoi passare un array multidimensionale statico purche` tu specifichi tutte le dimensioni tranne la prima, che e` opzionale. E a volte mi sono chiesto il perche` di cio`, ed ora l`ho capito cazzo!

    Un array statico multidimensionale in C non e` un array di array, quindi ha differente livello di indirezione da un puntatore a puntatore!!!

    'tel' va in effetti castato a char*, e i limiti dell`array specificati nel prototipo delle funzioni sono indispensabili per calcolare l`offset dal puntatore all`inizio dell`array, che quindi a basso livello e` _sempre_ monodimensionale (qui e` char*)!

    Ti ringrazio per avermi spinto ad approfondire l`argomento.

    Ciao.

  6. #6
    ok

  7. #7
    Utente di HTML.it L'avatar di Cholo
    Registrato dal
    Aug 2002
    Messaggi
    680
    Mmhhh, ho più o meno capito.

    Alla seconda soluzione, quella con i puntatori c' ero quasi arrivato.

    Grazie mille r0x !!!


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.