使用指针初始化矩阵

问题描述 投票:0回答:1
int (*mat)[3]={{1,7,8},{1,2,3},{334,43,8}};

给出如下错误:

warning: braces around scalar initializer
warning: initialization of 'int *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
warning: excess elements in scalar initializer

但是我们可以将数组初始化为

int (*mat)[3]
,那么为什么分配会出现问题呢?

我尝试创建一个二维数组并为其添加元素

c matrix
1个回答
0
投票

最简单的解决方案是简单地使用二维数组:

    int m[][3] = {{1,7,8}, {1,2,3}, {334,43,8}};

然而,追求拥有指针数组的想法,OP中的问题是,例如

{1,7,8}
不是
int *
的有效初始值设定项。要直接初始化指向数组的指针,可以使用复合文字:

    int *m[] = {(int []){1,7,8}, (int []){1,2,3}, (int []){334,43,8}};

虽然这很不寻常,但它比二维数组提供了灵活性,即并非所有行都需要具有相同的大小。这是以增加存储大小(因为行指针被显式存储)和增加访问时间为代价的,因此不建议对公共矩阵使用这种方法。

© www.soinside.com 2019 - 2024. All rights reserved.