2012-01-07 3 views
2

J'ai le code suivant des déclarations:argument de la fonction de tableau struct

struct coord { 
int x; 
int y; 
} 
void rotateFig(struct coord[10][10]); 

je dois mettre en œuvre rotateFig. J'ai essayé de commencer par ce qui suit:

void rotateFig(struct coord[10][10] c) 
{ 
    //code 
} 

Je ne peux pas le compiler - probaly la façon dont je transférer c dans la définition de la fonction est incorrecte .Comment dois-je transférer c en utilisant la signature donnée. Merci

+1

Voir: http: // www.dfstermole.net/OAC/harray2.html –

Répondre

2

struct coord est un type et c est une variable de type struct coord qui peut contenir 10 X 10struct coord éléments.

Il devrait être comme suit

void rotateFig(struct coord c[10][10]) 

Une chose à noter lorsque vous travaillez avec tableau multi-dimension C est qu'il ne peut pas être revenir en arrière d'une fonction. Pour plus de détails, lisez this. Il n'est donc pas conseillé d'utiliser le format ci-dessus comme C par défaut transmet les arguments par valeur et non par adresse.

Alors que @ Mr.TAMER mentionné dans sa réponse, vous devez utiliser les éléments suivants

void rotateFig(struct coord** c, int d1, int d2) 

OTOH, vous pouvez utiliser le code rotate suivant pour votre référence! Il fait pivoter un tableau 2d à 90 degrés!

#include <stdio.h> 

#define N 10 
int matrix[N][N]; 

void display() 
{ 
    int i, j; 

    printf("\n"); 
    for (i=0; i<N; i++) { 
     for (j=0; j<N; j++) 
      printf("%3d", matrix[i][j]); 
     printf("\n"); 
    } 
    printf("\n"); 

    return; 
} 

int main() 
{ 
    int i, j, val = 1; 
    int layer, first, last, offset, top; 

    for (i=0; i<N; i++) 
     for (j=0; j<N; j++) 
      matrix[i][j] = val++; 

    display(); 

    for (layer = 0; layer < N/2 ; layer++) { 
     first = layer; 
     last = N - layer - 1; 
     for (i=first; i< last ; i++) { 
      offset = i - first; 
      top = matrix[first][i]; 

      matrix[first][i] = matrix[last-offset][first]; 
      matrix[last-offset][first] = matrix[last][last-offset]; 
      matrix[last][last-offset] = matrix[i][last]; 
      matrix[i][last] = top; 
     } 
    } 

    display(); 
    return 0; 
} 

Espérons que cela aide!

6

Utilisez cette définition:

void rotateFig(struct coord c[10][10]) 
{ 
    //code 
} 

Le tableau est le paramètre réel, de sorte que les dimensions doivent venir après son nom, pas avant.

3

Bien que d'autres réponses sont assez, je préfère passer comme un pointeur et en passant les dimensions avec elle, ce qui est plus dynamique, et est la même pour la partie //code:

void rotateFig(struct coord**, int, int); 

void rotateFig(struct coord** c, int d1, int d2) 
{ 
    //code 
} 
+0

mais votre prototype et la définition ne correspondent pas ...: -/ – littleadv

+0

@littleadv: Oh oui, merci je vais le réparer à la fois :) –

Questions connexes