2012-01-07 46 views
2

我聲明如下代碼:結構陣列功能參數

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

我需要實現rotateFig。 我試着先從以下幾點:

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

我`噸編譯 - probaly我在函數定義調用C的方法是不正確。如何,我應該轉移c。使用定簽名。 謝謝

+1

參見:HTTP:// www.dfstermole.net/OAC/harray2.html – 2012-01-07 10:01:13

回答

2

struct coord是一種類型和cstruct coord類型可容納10 X 10struct coord元素的變量。

所以應該如下

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

一件事C與多維數組工作時是不能從函數返回回注。詳情請閱讀this。所以它不建議使用上面的格式作爲默認值C按值而不是按地址傳遞參數。

,以便在他的回答中提到@ Mr.TAMER,你應該使用下列

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

OTOH,你可以使用下面的代碼旋轉,供大家參考!它將2d陣列旋轉90度!

#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; 
} 

希望這有助於!

6

使用這樣的定義:

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

數組是實際參數,所以尺寸必須拿出其名稱後,而不是之前。

3

雖然其他答案是不夠的,我更喜歡將它作爲一個指針,並通過與它的尺寸,這更是動態的,是爲//code部分是相同的:

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

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

但您的原型和定義不匹配...: -/ – littleadv 2012-01-07 10:20:11

+0

@littleadv:哦,是的,謝謝我會立即修復它:) – 2012-01-07 10:27:06