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

    [C++] Passare sottomatrice

    Ho un array 3-dimensionale int A[][8][9] e devo passare per riferimento a una funzione il suo strato k-esimo (cioe' tutti gli elementi della matrice A[k][][]).

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    Originariamente inviato da starcraftworld
    Ho un array 3-dimensionale int A[][8][9] e devo passare per riferimento a una funzione il suo strato k-esimo (cioe' tutti gli elementi della matrice A[k][][]).
    E quindi? Qual è il problema? Qual è il codice che hai scritto che non funziona?

    Specificare qualche dettaglio in più non guasta mai... giusto per evitare inutili incomprensioni.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Non ho scritto il codice. Perche' non so come si faccia a passare il riferimento di un "sottoarray bidimensionale"...

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    93
    Ciao,

    non so se può esserti di aiuto ma ho pensato a questo:

    in C le matrici sono memorizzate per righe in un array monodimensionale. Questo vuol dire che un elemento Aij di una matrice A[m][n] si può utilizzare anche con *(A+(i x n)+j).

    Analogamente per le matrici 3D. Suppniamo A[k][m][n]: da A parte la prima sottomotracie, da (A+(m x n)) parte la seconda sottomatrice, da (A+(m x n x k)) parte la k-esima sottomotracie.

    Volendo potresti usare un int * al quale assegnare ogni volta l'indirizzo di partenza.

    Ad esempio (ma spero di non aver sparato solo cavoloate )
    codice:
    #include <stdio.h>
    
    int main (void)
    {
      int a[5][5][5], *b;
      int i,j,k;
      
      for(k=0;k<5;k++)
      {
        for(i=0;i<5;i++)
        {
          for(j=0;j<5;j++)
          	a[k][i][j]=j;
         }
      }
      
      for(k=0;k<5;k++)
      {
          b=(int*)(a)+(25*k);
          for(i=0;i<5;i++)
          {
    	for(j=0;j<5;j++)
    	  printf("%d ", *(b+(i*5)+j));
    	printf("\n");
          }
          printf("\n\n");
          
      }
      
      return 0;
    }

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.