2014-04-12 35 views
1

這裏是我的代碼:
數組,指針得到錯誤[預警]各地標初始化大括號

int main(int argc, const char * argv[]) 
{ 

    int *A[3] = {{1,1,1,1},{1,1,1,1},{1,1,1,1}}; 
    int *B[4] = {{2,2,2},{2,22,2},{3,3,3},{3,3,3}}; 
    int *C[3]; 
    multiply(A, 1, 2, B, 3, 4, C); 
    printf("A matrix:\n"); 
    printMatrix(A,3,4); 
    printf("B matrix:\n"); 
    printMatrix(B,4,3); 
    printf("C matrix:\n"); 
    printMatrix(C,3,3); 
    printf("Hello, World!\n"); 
    return 0; 
} 

它只是INT主要部分!
我得到錯誤[warning]Braces around scalar initializer
符合:int *A[3] = {{1,1,1,1},{1,1,1,1},{1,1,1,1}};爲什麼?是我的錯誤還是編譯器版本差異?

+2

'A'是'int *'的數組。 – BLUEPIXY

回答

3

Aint *的數組,而不是二維數組。因此,初始化程序應該是標量值,它們是int *

如果你有C99或C11,則可以挽救這樣的代碼:

#include <stdio.h> 

extern void printMatrix(int *x[], int y, int z); 
extern void multiply(int *A[], int n1, int n2, int *B[], int n3, int n4, int *C[3]); 

int main(void) 
{ 
    int *A[3] = {(int []){1,1,1,1}, (int []){1,1,1,1}, (int []){1,1,1,1}}; 
    int *B[4] = {(int []){2,2,2}, (int []){2,22,2}, (int []){3,3,3}, (int []){3,3,3}}; 
    int *C[3]; 
    multiply(A, 1, 2, B, 3, 4, C); 
    printf("A matrix:\n"); 
    printMatrix(A, 3, 4); 
    printf("B matrix:\n"); 
    printMatrix(B, 4, 3); 
    printf("C matrix:\n"); 
    printMatrix(C, 3, 3); 
    printf("Hello, World!\n"); 
    return 0; 
} 

本品採用C99複合文字的初始化。

但是,您需要注意在multiply()內部分配適當的空間,以便將每行的數據存儲在C中。你還必須知道如何釋放分配的空間。