数组,指针获取错误[警告]时,如何将围绕标量初始化器进行扩展?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (37)

这是我的代码:

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}};

为什么?是因为我的错误还是编译器版本差异?

提问于
用户回答回答于

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复合文字。

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问5 回答
  • 无聊至极

    4 粉丝504 提问5 回答
  • 嗨喽你好

    7 粉丝480 提问4 回答
  • 御姐万岁

    6 粉丝507 提问3 回答

扫码关注云+社区

领取腾讯云代金券