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

    utilizzare array al di fuori dellla sua funzione

    signori buongiorno,
    della seguente funzione:

    codice:
    int Blocks2()
    {
      static int i = 0;
      int j;
      uint16_t blocks2;
      char buf2[32]; 
      int coordinatex2[] = {0,0,0,0,0};
    
    
      blocks2 = pixy2.getBlocks();
    
    
    if (blocks2)
      {
        i++;
        
        // do this (print) every 50 frames because printing every
        // frame would bog down the Arduino
        if (i%50==0)
        {
          sprintf(buf2, "Detected %d:\n", blocks2);
          Serial.print(buf2);
          for (j=0; j<blocks2; j++)
          {
            sprintf(buf2, "  block %d: ", j);
            Serial.print(buf2); 
            pixy2.blocks[j].print();
            coordinatex2[j] = pixy2.blocks[j].x;
        }
      }  
     }
    }
    avrei bisogno di tirarmi fuori l'array: coordinatex2[] solo che non potendoli estrarre come parametri sono un pelo piantato, avevo pensato di passarmi un altro array dal main del programma invio[], e poi copiare coordinatex2[] in invio[], può essere un' idea? se l'array edl main lo "importo" nella funzione così:

    codice:
    int Blocks2(invio[]){}
    grazie in anticipo

  2. #2
    Le tre possibilità "classiche" sono:
    - come dici tu, te lo fai passare come parametro;
    - lo inglobi in una struct, che può essere usata come valore di ritorno;
    - usi l'allocazione dinamica e restituisci un puntatore all'array così allocato (il chiamante dovrà poi deallocarlo esplicitamente).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    ah ok, ma e per importare l array invio[] questa sintassi e giusta?

    codice:
    int Blocks0(invio0[])
    {
      static int i = 0;
      int j;
      uint16_t blocks0;
      char buf0[32]; 
      int coordinatex0[] = {0,0,0,0,0};
     // int a = 0;
      int b = 0;
      
      blocks0 = pixy0.getBlocks();
    
    
    if (blocks0)
      {
        i++;
        
        // do this (print) every 50 frames because printing every
        // frame would bog down the Arduino
        if (i%50==0)
        {
          sprintf(buf0, "Detected %d:\n", blocks0);
          Serial.print(buf0);
          for (j=0; j<blocks0; j++)
          {
            sprintf(buf0, "  block %d: ", j);
            Serial.print(buf0); 
            pixy0.blocks[j].print();
            coordinatex0[j] = pixy0.blocks[j].x;
            invio[j] = coordinatex2[j];
          }
        }
      }  
    
    
    
    
    
    
        return invio[];
    
    
    
    
    
    
    }
    e questo array invio[] lo posso richiamare dal corpo principale dichiarandolo e inizializzandolo li? mi sfugge la sintassi per imortarlo eleborarlo e rispedirlo fuori aggiornato

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    L'array non si "importa".

    Puoi passare l'array con

    void funzione(int array[])

    e modificarlo nella funzione. Le modifiche saranno visibili anche all'esterno della funzione e non dovrai fare nessun "return".
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    però se uso questa sintassi: int funzione(int array[]) mi da errore, m dice che array[] non e dichiarato, anche l ho dichiarato nel principale! scusate l'incopetenza..

  6. #6
    codice:
    int memoria0[] = {0,0,0,0,0}; // dichiaro l array  nel principale
    .
    .
    .
    
    int Blocks0(int memoria0[]) lo passo alla funzione
    {
    .
    .
    .
    }
    
    Blocks0(memoria0[]);


    così mi chiede il parametro dentro le [] che parametro intende?
    Blocks0(memoria0[]);
    Ultima modifica di gianni88r; 20-02-2015 a 15:40

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Chiami la funzione con

    Blocks0(memoria0);

    non con le parentesi quadre ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    grazie mille

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.