这是我的代码:
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的主要部分!
我收到了错误
[警告]标量初始值设定项周围的括号
排队:
int *A[3] = {{1,1,1,1},{1,1,1,1},{1,1,1,1}};
为什么呢?是因为我的错误还是编译器版本差异?
答案 0 :(得分:4)
A
是int *
的数组,而不是2D数组。因此,初始值设定项应为标量值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
中每行的数据。您还必须知道如何释放分配的空间。