-2

重複の可能性:
多次元配列を関数 C に渡す

2D 構造体を関数に渡したい 関数のプロトタイプと定義、および関数の「typedef」を次に示します。

typedef struct {
BOOLEAN valid;
event_t event_list [MAXEVS];
int num_events;
} calentry_t;

calentry_t calendar[12] [31]; // The declaration of the structure

2D 構造に渡す関数の定義を作成するにはどうすればよいですか。また、それを渡すにはどうすればよいですか。誰かが私のエラーを見つけてください。

InitializeCalendar (calentry_t *calendar){
   int x, y;
for(x = 0; x < 12; x ++) {
    if (x==2){
            for(y = 0; y <= 28; y ++){ 
                (*calendar).calendar[x][y].valid = TRUE;
            }
            for (y=29; y<= 31; y++){
                (*calendar[x][y]).valid = FALSE;
        }
    }
    else if  (x==4 || x==6 || x==9 || x==11){
        for(y = 0; y <= 30; y ++){ 
            (*calendar[x][y]).valid = TRUE;
            }
            for (y=30; y<= 31; y++){
                (*calendar)[x][y].valid = FALSE;
            }
        }
    }
}
4

2 に答える 2

0
void foo(calentry_t mycal[12] [31]) {
  mycal[0][1].valid =1;
}

int main(void) {
  foo(calendar);
  printf("valid: %d\n", calendar[0][1].valid);
}
于 2012-09-18T17:04:31.463 に答える
0

2D 構造を別の構造内にラップします。

typedef struct {
BOOLEAN valid;
event_t event_list [MAXEVS];
int num_events;
} calentry_t;

typedef struct {
    calentry_t calEntries[12][31];
} calendar_t;


calendar_t calendar;

InitializeCalendar(&calendar);


void InitializeCalendar(calendar_t *calendar)
{
    // for example
    calendar->calEntries[0][0].valid = TRUE;
}
于 2012-09-18T18:50:55.813 に答える