2015-11-23 50 views
0

我想創建一個結構,將有兩個整數值,一個數組和兩個2-D矩陣使用我的代碼如下。我可以使用整數和數組初始化結構,我的'Gen'函數將創建我想要的數組的隨機值。在一個結構中創建一個矩陣

但是,當我嘗試添加矩陣組件時,遇到了問題。我的編譯器給我一個警告:「從不兼容的指針類型初始化」。如果我理解到目前爲止我讀到的內容,這是因爲該結構需要指向表示矩陣中每一行的指針數組。我不知道那個語法。

快速提示:我看到的與此問題相關的其他主題都在main()函數以外的函數中初始化結構,所以我沒有發現這些解決方案很有用。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <time.h> 
#include <math.h> 
#include <string.h> 

// Define structure 
typedef struct { 
    int row; 
    int col; 
    int *arr; 
    int **mat1; 
    int **mat2; 
}container; 


// Function headers 
void Gen(container Thing); 


int main() { 

    int row = 5; 
    int col = 6; 
    int A[row]; 
    int M1[row][col]; 
    int M2[row][col+1]; 

    // Initialize structure 
    container Object = {row, col, A, M1, M2}; 

    // Run "Gen" function 
    Gen(Object); 

    int i, j; // Index variables 

    // Display the array 
    for(i = 0; i < row; i++) 
    { 
     printf("%i ", Object.arr[i]); 
    } 

    printf("\n\n"); 

    // Display the numbers from the matrices 
    for(j = 0; j < Object.row; j++) 
    { 
     for(i = 0; i < Object.col; i++) 
     { 
      printf("%i ", Object.mat1[j][i]); 
     } 
     printf("\n"); 
    } 

    printf("\n"); 

    for(j = 0; j < Object.row; j++) 
    { 
     for(i = 0; i < Object.col; i++) 
     { 
      printf("%i ", Object.mat2[j][i]); 
     } 
     printf("\n"); 
    } 

    return (EXIT_SUCCESS); 
} 

// Function to generate random values in the array & matrices 
void Gen(container Thing) 
{ 
    int i, j; 
    srand(time(NULL)); 

    // Generate random values for the array 
    for(i = 0; i < Thing.row; i++) 
    { 
     Thing.arr[i] = rand() % 5; 
    } 

    // Generate random values for the matrix 
    for(j = 0; j < Thing.row; j++) 
    { 
     for(i = 0; i < Thing.col; i++) 
     { 
      Thing.mat1[j][i] = rand() % 5; 
      Thing.mat2[j][i] = rand() % 5; 
     } 
    } 
} // End of "Gen" function 
+0

有很多的問題上,以便與該錯誤:http://stackoverflow.com/search?q=initialization+from+incompatible+pointer+type –

+0

沒有數組在你的'struct'中,只有指針。指針與數組不一樣,反之亦然。 – Olaf

回答

1
container Object = {row, col, A, M1, M2}; 

是錯誤的,因爲的M1類型是int[row][col],其可以衰減到int (*)[col]但不int**。你有與M2相同的問題。

您需要重新考慮生成container的策略。

例如:

int main() { 

    int row = 5; 
    int col = 6; 
    int A[row]; 
    int* M1[row]; 
    int* M2[row]; 

    for (int i = 0; i < row; ++i) 
    { 
     M1[i] = malloc(sizeof(M1[i][0])*col); 
     M2[i] = malloc(sizeof(M1[i][0])*(col+1)); 
    } 

    // Initialize structure 
    container Object = {row, col, A, M1, M2}; 


    ... 


    for (int i = 0; i < row; ++i) 
    { 
     free(M1[i]); 
     free(M2[i]); 
    } 

    return (EXIT_SUCCESS); 
}