首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维阵列与阵列结构

二维阵列与阵列结构
EN

Stack Overflow用户
提问于 2013-10-20 18:05:17
回答 3查看 943关注 0票数 8

我是C语言新手,所以我的问题可能不符合高标准。

我们能用吗

代码语言:javascript
复制
struct mat{

  int a[10];

};m[10];

而不是

代码语言:javascript
复制
int mat[10][10];

有什么区别吗?哪一个更有效率?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-20 18:16:08

您应该信任编译器。但是,我可能会根据您的应用程序,提出两个我知道的效果很好的方案。

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

代码语言:javascript
复制
  for( i = 0 ; i < 10 ; i++) {
     for (j = 0 ; j < 10 ; j++) {
         // do something with a[i][j]
     }
  }

vs

代码语言:javascript
复制
  for( i = 0 ; i < 10 ; i++) {
     for (j = 0 ; j < 10 ; j++) {
         // do something with a[j][i]
     }
  }

在性能上是不同的。后者更有表现力。

2)选项1需要额外的注意,而且违反直觉。我更喜欢做

代码语言:javascript
复制
   int a[100]

并这样做

代码语言:javascript
复制
   for( i = 0 ; i < 100 ; i++)
      inline_function(a[i]);

其中的函数应该是内联的,并预先形成你必须做的事情。如果你能避开这个函数,那就更好了。例如,如果它是一个和,它的2d或向量不会改变任何东西。

编辑:这里是一个引用,它在详细信息中解释了有关数组顺序的部分:http://www.cplusplus.com/doc/tutorial/arrays/

票数 1
EN

Stack Overflow用户

发布于 2013-10-20 18:08:53

您将使用m[x].a[y],它的语法比m[x][y]复杂,但在词汇上没有添加任何内容。

票数 2
EN

Stack Overflow用户

发布于 2013-10-20 18:09:37

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

代码语言:javascript
复制
struct mat
{
  int a[10];
};

您可以定义一个结构数组:

代码语言:javascript
复制
struct mat m[10];

一步一步地做:

代码语言:javascript
复制
struct mat{

  int a[10];

}m[10];

注意,在之前有一个额外的分号,这是不正确的语法。

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

这在语法上并不等同于2d数组,如下所示:

代码语言:javascript
复制
int mat[10][10];

可以使用mat[i][j]访问

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19480911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档