2014-06-21 37 views
-2

的我提出了以下功能:形成一個大陣列出小的

int * getMat(char x){ 
    int[2][2] returnValue; 
    switch(x){ 
     case "0": returnValue = [0,0;0,0]; 
       break; 
     case "1": returnValue = [1,1;1,0]; 
       break; 
     .... 
     etc 
    } 
    return returnValue; 
} 

在主函數,我有這些載體:

char a[] = "010110" 
int bigArray[100][2]; 

我需要填充bigArray [] []通過迭代[]中的每個字符,並將返回的數組從getMat()添加到bigArray。

換句話說,對於字符序列 「010110」,該bigArray應該是這樣的:

[0,0,1,1,0,0,1,1,1,1,0,0; 
0,0,1,0,0,0,1,0,1,0,0,0] 

我被困在此:

int bigArray[100][2]; 
for(int i=0; i<strlen(a); i++){ 
    int mat[2][2] = getMat(a[i]); 

} 

有人可以幫助我一些提示?我無法弄清楚如何繼續。

+4

'getMat'既不是'C'也不''C++' – P0W

+0

怎麼回事?我很喜歡C/C++ –

+1

你有沒有試過編譯你的'getMat()'函數?已經不能編譯函數簽名。 – cmaster

回答

1
#include <stdio.h> 
#include <string.h> 

int (*getMat(char x))[2][2] { 
    static int returnValue[][2][2] = { 
     {{0,0},{0,0}}, 
     {{1,1},{1,0}}, 
     //... 
    }; 
    switch(x){ 
    case '0': 
     return &returnValue[0]; 
    case '1': 
     return &returnValue[1]; 
    //.... 
    //etc 
    } 
    return NULL; 
} 


int main(void){ 
    char a[] = "010110"; 
    int bigArray[2][100]; 
    int (*tmp)[2][2]; 
    for(int i=0;a[i];++i){ 
     tmp = getMat(a[i]); 
     memcpy(&bigArray[0][i*2], &(*tmp)[0], sizeof((*tmp)[0])); 
     memcpy(&bigArray[1][i*2], &(*tmp)[1], sizeof((*tmp)[1])); 
    } 
    //test print 
    for(int i=0;i<12;++i) 
     printf("%d ", bigArray[0][i]);//0 0 1 1 0 0 1 1 1 1 0 0 
    printf("\n"); 
    for(int i=0;i<12;++i) 
     printf("%d ", bigArray[1][i]);//0 0 1 0 0 0 1 0 1 0 0 0 
    printf("\n"); 
    return 0; 
} 
+0

謝謝你,你是一個人生的救星:D –

1

你不能在C中返回數組。相反,你可以做的是向getMat指示它應該在哪裏寫輸出。

例如:

void make_big(char in, char *out_row1, char *out_row2) 
{ 
    char const *temp = "0000"; 
    switch(in) 
    { 
    case 1: temp = "1110"; 
    // etc. 
    } 
    out_row1[0] = temp[0]; 
    out_row1[1] = temp[1]; 
    out_row2[0] = temp[2]; 
    out_row2[1] = temp[3]; 
} 

// in main 
char big[2][100+1] = { 0 }; // [rows][cols], and null terminator 
for(int i=0; i<strlen(a) && i < 50; i++) 
{ 
    make_big(a[i], &big[0][i*2], &big[1][i*2]); 
} 

如果你對「臨時」值都是通過字符串文字表示的,那麼你可以返回一個指向他們,並有調用函數執行的定位邏輯。您可以返回一個指向數組元素的指針,但是該數組在函數返回後仍然存在(即它不能是該函數的非靜態局部變量)。但是如果你需要在運行時計算這些值,這將不起作用。

相關問題