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]