c/c++开发分享2d数组vs数组的结构

我是C语言的新手,所以我的问题可能达不到高标准

我们可以使用吗

struct mat{ int a[10]; };m[10]; 

代替

 int mat[10][10]; 

有什么不同? 哪个更有效率?

    你应该相信编译器。 但是,根据您的应用,我可能会建议我认为有两种选择。

    1)使用int [10] [10]但确保在循环时以正确的顺序访问它们。 编译器将“在下面”使用单个数组结构,以便按顺序进行访问

      for( i = 0 ; i < 10 ; i++) { for (j = 0 ; j < 10 ; j++) { // do something with a[i][j] } } 

    VS

      for( i = 0 ; i < 10 ; i++) { for (j = 0 ; j < 10 ; j++) { // do something with a[j][i] } } 

    在性能方面有所不同。 后者更具性能。

    2)选项1需要额外注意并且违反直觉。 我更喜欢这样做

      int a[100] 

    并做

      for( i = 0 ; i < 100 ; i++) inline_function(a[i]); 

    函数应该内联声明,并预先形成你必须完成的事情。 如果你可以避免这个function,那就更好了。 例如,如果它是一个总和,拥有它2d或向量不会改变任何东西。

    编辑:这里有一个参考,详细解释了关于数组顺序的一点: http : //www.cplusplus.com/doc/tutorial/arrays/

    你会有m[x].a[y]这是比m[x][y]更复杂的语法,但是没有任何词汇表

    不。这是一个包含数组的结构。

     struct mat { int a[10]; }; 

    您可以定义struct数组:

     struct mat m[10]; 

    要一步完成:

     struct mat{ int a[10]; }m[10]; 

    请注意,在m [10]之前你有一个额外的分号 ,这是不正确的语法。

    要访问arr中的元素,请使用m[i].a[j]

    这与2d数组的语法不同,如:

     int mat[10][10]; 

    您可以使用mat[i][j]

      以上就是c/c++开发分享2d数组vs数组的结构相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545872.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注