Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [C] puntatori

  1. #1

    [C] puntatori

    Salve a tutti.
    Avrei questo problema con i puntatori.

    usando un array (lo chiamo A) per stamparlo basta:

    printf("%d", *(A+i)); - dove i e la posizione (e funziona)

    se invece devo stampare l'elemento di un array 2d come si fa??

    ho provato **(A+i+j) ma mi va in errore quando viene usato....

    regalami un oggi da favola...e il domani bhe!?non mi importa se tu 6 con me! ©Ily

  2. #2

    Prova cosi

    codice:
    int main()
    
    {
    
    char *arr[10][2];
    
    *arr[1][1] = 'a';
    *arr[1][2] = 'b';
    
    printf("%c",*arr[1][2]);
    system("pause");
    return 0;
    
    }

  3. #3
    ehm... non va!
    Allora io ho un array bidim e 2 array monodim.

    Sono di tipo float ed uso l'allocazione dinamica:

    codice:
    float **a, *x, *y;
    
    a = (float**)malloc(n*sizeof(float*));
       
    for (i=0; i<n; i++)
        a[i] = (float*)malloc(m*sizeof(float));
        
    x = (float*)malloc(n*sizeof(float));
    y = (float*)malloc(m*sizeof(float));
    dove n è il numero delle righe mentre m il numero delle colonne.
    Ora devo prendere in input l'array a e l'array x:
    codice:
    for (i=0; i<n; i++)
        {
            for (j=0; j<m; j++)
            {
                    scanf ("%f", &a[i][j]);
            }
        }
        for (i=0; i<n; i++)
        {
            scanf ("%f", x+i);
        }
    Poi nell'array y ci andrà il risultato del prodotto a*x;
    Io però vorrei prendere l'array in input come faccio con l'array x, cioè usando semplicemente il puntatore.
    Cioè se scrivo scanf ("%f", a+i+j);
    non va...... non so se mi sono spiegato

    regalami un oggi da favola...e il domani bhe!?non mi importa se tu 6 con me! ©Ily

  4. #4
    Originariamente inviato da Yassassin
    Io però vorrei prendere l'array in input come faccio con l'array x, cioè usando semplicemente il puntatore.
    Cioè se scrivo scanf ("%f", a+i+j);
    non va...... non so se mi sono spiegato
    codice:
    scanf("%f",((a+i)+j));

  5. #5
    matsoftware, quel codice crasherebbe indegnamente..

    Yassassin, potresti fare cosi`:

    codice:
    scanf( "%f", *( a + i ) + j );
    Ma perche` proprio cosi` vuoi farlo?

    Altrimenti, se hai gli elementi della matrice disposti su un array monodimensionale la "regola" del conto e` (posto 'm' il numero di colonne):

    codice:
    scanf( "%f", a + i * m + j );
    "a + i + j" non puo` funzionare, fondamentalmente perche` e` un puntatore a puntatore, non un puntatore (a e` float**).

    Ciao.

  6. #6
    Originariamente inviato da r0x
    Yassassin, potresti fare cosi`:

    codice:
    scanf( "%f", *( a + i ) + j );
    proprio quello che cercavo. Lo fece vedere il prof all'univ ma non me la ricordavo più (e non trovavo gli appunti..... ). Ci ho perso mezza giornata

    Originariamente inviato da r0x
    Ma perche` proprio cosi` vuoi farlo?
    Il prof... :quipy:

    Originariamente inviato da r0x
    Altrimenti, se hai gli elementi della matrice disposti su un array monodimensionale la "regola" del conto e` (posto 'm' il numero di colonne):

    codice:
    scanf( "%f", a + i * m + j );
    Me lo segnerò, può tornarmi utile in futuro

    Originariamente inviato da r0x
    "a + i + j" non puo` funzionare, fondamentalmente perche` e` un puntatore a puntatore, non un puntatore (a e` float**).
    Infatti

    Già che mi trovo, vorrei togliermi un altro pensiero. Quando faccio l'allocazione dinamica di un array bidim, devo allocare prima le righe e poi le colonne o viceversa?? O è la stessa cosa??
    E per finire (mi dimentico sempre, non picchiatemi, forse è la volta buona che me lo memorizzo) se scrivo un array m*n, m indica le colonne ed n le righe o viceversa??

    Cmq grazie a tutti per l'aiuto.

    regalami un oggi da favola...e il domani bhe!?non mi importa se tu 6 con me! ©Ily

  7. #7
    Io sono abituato ad intendere m x n come m righe per n colonne. E questa abitudine direi che deriva dai libri di matematica.

    Beh, il fatto di allocare prima le colonne e poi le righe .. dipende. L`importante e` che _prima_ allochi un array di puntatori e che poi in ciascun puntatore di tale array allochi un array di valori. Sta a te poi vedere quali considerare le righe e quali le colonne. In C sara` sempre e cmq un array di array.

    Una cosa pero` resta fissa. Il primo indice e` ovviamente quello dell`array di puntatori, e il secondo quello dei "sotto-array". Di conseguenza, nel tuo codice la matrice avra` n righe ed m colonne.

    Scorrimento n x m:

    codice:
    for( i = 0; i < n; ++i )
        for( j = 0; j < m; ++j )
            scanf( "%f", &a[ i ][ j ] );
    Scorrimento m x n:

    codice:
    for( j = 0; j < m; ++j )
        for( i = 0; i < n; ++i )
            scanf( "%f", &a[ j ][ i ] );
    Come vedi puoi facilmente capovolgere il punto di vista, leggendo la trasposta.

    Ciao.

  8. #8
    Originariamente inviato da Yassassin
    proprio quello che cercavo. Lo fece vedere il prof all'univ ma non me la ricordavo più (e non trovavo gli appunti..... ). Ci ho perso mezza giornata

    Il prof... :quipy:
    esame di Programmazione I ???

    ciao!
    "Ogni artista è un cannibale, ogni poeta è un ladro
    tutti uccidono la loro ispirazione poi cantano del loro dolore "

  9. #9
    Veramente a me non ha crashato, ma vabè .

  10. #10
    E` solo un caso. :bubu:

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 © 2025 vBulletin Solutions, Inc. All rights reserved.