Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di felpone
    Registrato dal
    Jun 2010
    Messaggi
    182

    [C]problema con puntatori

    Salve non capisco dove sia l'errore,mi sembra sia tutto ok con il puntatore...eppure il puntatore accede a locazioni sbagliate a quanto sembra. In questo caso la somma dovrebbe essere 0 invece da un numero folle.


    codice:
    #include <stdio.h>
    #define LEN 5
    
    int sum_two_dimensional_array(const int a[][LEN],int n){
     int *p,sum;
     
     for(p=&a[0];p<a[n]+LEN;p++){
        sum+=*p;                          
                                  
     printf("%d\n",*p);
     
     }   
        
        
      return sum;  
        
     
        
    }
    
    
    int main (){
     int n=2;  
     const int c[][LEN]={0};
     
     printf("La somme e':%d",sum_two_dimensional_array(c,n));   
      system("pause");  
        
        
        }

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Hai diversi errori
    non inizializzi sum , quindi ha un valore indefinito al quale tu sommi e ottieni numeri strani

    la condizione del for nella funzione , è errata dai a[n] n =2 ma la matrice non ha due
    righe , non hai dato la prima dimensione

    se non inizializzi la matrice con dei valori il risultato è sempre zero

    codice con correzzioni :


    codice:
    int sum_two_dimensional_array(const int a[][LEN],int n){
     int *p,sum=0;//se non inizializzi sum a un valore indefinito 
     
     // n 0 puntatore al primo array
     // n 1 puntatore al secondo array
     for(p=a[n];p<a[n]+LEN;p++){
        
        sum+=*p;                          
                                  
     printf("%d\n",*p);
     
     }   
        
        
      return sum;  
        
     
        
    }
    
    
    int main (){
     int n=1;  
     const int c[2][LEN]={{0,6,7,8,8},{10,23,20,6,1}};
     
     printf("La somme e':%d",sum_two_dimensional_array(c,n));   
      system("pause");  
        
        
        }
    Tecnologia

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Giusto, ma dal titolo della funzione penso che lui volesse ottenere la somma di entrambe gli array, non solo del secondo.Per cui ho modificato un' istruzione:

    codice:
    int sum_two_dimensional_array(const int a[][LEN],int n){
     int *p,sum=0;//se non inizializzi sum a un valore indefinito 
     
     // n 0 puntatore al primo array
     // n 1 puntatore al secondo array
     for(p=a[n];p<a[n]+LEN;p++){
        
        sum+=*p + *(p-LEN);                          
                                  
     printf("%d\n",*p);
     
     }   
        
        
      return sum;  
        
     
        
    }
    
    
    int main (){
     int n=1;  
     const int c[2][LEN]={{0,6,7,8,8},{10,23,20,6,1}};
     
     printf("La somme e':%d",sum_two_dimensional_array(c,n));   
      system("pause");  
        
        
        }
    PS: felpone, indenta meglio il codice.

  4. #4
    Utente di HTML.it L'avatar di felpone
    Registrato dal
    Jun 2010
    Messaggi
    182
    Non è vero che non ho dato la prima dimensione della matrice,viene passata come argomento alla funzione (int n).

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da felpone
    Non è vero che non ho dato la prima dimensione della matrice
    Come no? Non mi pare che in

    const int c[][LEN]={0};

    ci sia la prima dimensione.

    E cosa c'entra il parametro della funzione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di felpone
    Registrato dal
    Jun 2010
    Messaggi
    182
    ecco l'ho corretto e funziona perfettamente,come vedi la prima dimensione è passata alla funzione come argomento.

    codice:
    #include <stdio.h>
    #define LEN 5
    
    int sum_two_dimensional_array(const int a[][LEN],int n){
     int *p,sum=0;
     
     for(p=&a[0][0];p<&a[n-1][LEN];p++){
        sum+=*p;                          
                                  
     printf("%d\n",*p);
     
     }   
        
        
      return sum;  
        
     
        
    }
    
    
    int main (){
     int n=2;  
     const int c[][LEN]={{2,0,0,0,0},{2,0,0,2,0}};
     
     printf("La somme e':%d",sum_two_dimensional_array(c,n));   
      system("pause");  
        
        
        }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da felpone
    ecco l'ho corretto e funziona perfettamente,come vedi la prima dimensione è passata alla funzione come argomento.
    Allora non hai capito quello che ho tentato di dirti.

    Nel tuo primo post c'era scritto nel main

    const int c[][LEN]={0};

    mentre nell'ultimo

    const int c[][LEN]={{2,0,0,0,0},{2,0,0,2,0}};

    e ovviamente sono cose diverse.

    Nella prima versione, non hai indicato al compilatore nulla che gli permettesse di capire quanto fosse grande la prima dimensione. Nella seconda versione invece, dai dati forniti per l'inizializzazione, hai fornito al compilatore l'indicazione che la prima dimensione è 2

    E questo a prescindere dal parametro passato alla funzione in seguito.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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