Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C]passare un array a funzione

    Ciao a tutti!!...

    avrei un piccolo problema in C... anche perchè è la prima volta che mi imbatto in una roba simile....

    devo fare un funzione che data un array multidimensionale di stringhe mi trova il numero di stringhe contenute...

    finche l'array era monodimensionale ( cioè un vettore) bastava che facevo così:

    codice:
    int funzione (char *) {
    
    ....
    
    }
    
    main() {
    
    char str[100];
    int num=0
    
    num=funzione(str);
    
    }
    ho provato quindi alla stessa maniera(tranne qualche piccola modifica) anche con un array multidimensionale e questo è il codice:

    codice:
    char str[2][10]={"parola1","parola2"};
    
    int getlen(char **arstr) {
    
    	int i=0;	
    
    	while(1) {
    
    		if(arstr[i][0]==NULL) break;
    		else i++;
    
    	}
    
    	return i;
    
    }
    
    
    main() {
    
    	printf("\n%d",getlen(str));
    
    }
    ma non mi funziona : mi dice prima di tutto che char ** è differente da char * (valore che passo alla funzione nel main)...

    di una cosa non sono sicuro .... di questo:

    char str[10][5][9]
    char ***p = str

    oppure

    char str[7][8]
    char **p= str

    cioè se il numero di asterischi dipende dal numero di dimensioni di cui è composta l'array a cui il puntatore deve puntare...

    perche se questo è sbagliato di conseguenza è sbagliato anche quello che ho fatto nella funzione... ma come lo posso correggere?..

    qualcuno mi puo aiutare?...

    ciao ciao e grazie mille a tutti!!
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    se un array v ha r righe e c colonne, per accedere all'elemento (i, j) il compilatore si calcola la posizione v[i][j] con l'operazione:

    (i - 1) * c + j

    cioè prima delle'elemento (i, j) ci sono tutti quelli delle prime (i-1) righe, onguna delle quali contiene c colonne.

    per questo devono essere note tutte le dimensioni, tranne al più la prima, perche il compilatore accede agli elementi come se fossero disposti in un unico array lineare. In particolare, se v è bidimensionale deve essere noto al compilatore l numero di colonne.

    Se tu dici alla funzione che v è un int**, il compilatore non saprebbe come accedere a v[i][j], per questo nella funzione devi dichiarare

    int v[][10]

    come parametro,ad esempio, oppure continui ad avere
    int** v

    ma devi passare anche il numero di colonne e per accedere all'elemento fai:

    v[(i - 1) * c + j ]


    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Un'altra alternativa è dichiarare l'array in modo dinamico con malloc

    char** xxx;
    xxx = (char**)malloc(righe * sizeof(char *));
    for(int i = 0; in < righe; i++)
    xxx[i] = (char *)malloc(colonne * sizeof(char));

    in questo modo mipare puoi passare alla funzione un char**, e usare la notazione v[i][j]; devi comunque sempre passare il numero di righe e di colonne per fare i cicli for, non puoi utlizzare quel ciclo while infinito in quel modo perche vai ad accedere oltre il limite dell'array.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  4. #4
    perfetto grazie mille... ora funziona .. ho usato il metodo del vet[][10]

    grazie mille ciao ciao!
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

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.