当前位置:  开发笔记 > 编程语言 > 正文

C:二维阵列的大小

如何解决《C:二维阵列的大小》经验,为你挑选了3个好方法。

我需要一些帮助来计算二维数组的行和列.好像我不能算列?

#include 

int main() {

char result[10][7] = {

    {'1','X','2','X','2','1','1'},
    {'X','1','1','2','2','1','1'},
    {'X','1','1','2','2','1','1'},
    {'1','X','2','X','2','2','2'},
    {'1','X','1','X','1','X','2'},
    {'1','X','2','X','2','1','1'},
    {'1','X','2','2','1','X','1'},
    {'1','X','2','X','2','1','X'},
    {'1','1','1','X','2','2','1'},
    {'1','X','2','X','2','1','1'}

};

int row = sizeof(result) / sizeof(result[0]);
int column = sizeof(result[0])/row;

printf("Number of rows: %d\n", row);
printf("Number of columns: %d\n", column);

}

输出:
行数:10
列数:0



1> August Karls..:

使用数组长度宏更方便(并且更不容易出错):

#include 

#define LEN(arr) ((int) (sizeof (arr) / sizeof (arr)[0]))

int main(void)
{
    char result[10][7];

    printf("Number of rows: %d\n", LEN(result));
    printf("Number of columns: %d\n", LEN(result[0]));
    return 0;
}



2> Marcus Mülle..:

这是整数除法的问题!

int column = sizeof(result[0])/row;

应该

int column = 7 / 10;

在整数除法中7/10==0.

你想要做的是划分一行的长度,例如.sizeof(result[0])通过该行的一个元素的大小,例如.sizeof(result[0][0]):

int column = sizeof(result[0])/sizeof(result[0][0]);


这是错的.在这里,您将7(第一行上的元素数)除以1(`result [0] [0]`上的字符数).

3> emi..:

这对我有用(评论解释了原因):

#include 

int main() {

   char result[10][7] = {

       {'1','X','2','X','2','1','1'},
       {'X','1','1','2','2','1','1'},
       {'X','1','1','2','2','1','1'},
       {'1','X','2','X','2','2','2'},
       {'1','X','1','X','1','X','2'},
       {'1','X','2','X','2','1','1'},
       {'1','X','2','2','1','X','1'},
       {'1','X','2','X','2','1','X'},
       {'1','1','1','X','2','2','1'},
       {'1','X','2','X','2','1','1'}

   }; 

   // 'total' will be 70 = 10 * 7
   int total = sizeof(result);

   // 'column' will be 7 = size of first row
   int column = sizeof(result[0]);

   // 'row' will be 10 = 70 / 7
   int row = total / column;

   printf("Total fields: %d\n", total);
   printf("Number of rows: %d\n", row);
   printf("Number of columns: %d\n", column);

}

这个输出是:

Total of fields: 70
Number of rows: 10
Number of columns: 7

编辑:

正如@AnorZaken指出的那样,将数组作为参数传递给函数并sizeof在其上打印结果,将输出另一个total.这是因为当你传递一个数组作为参数(而不是指向它的指针)时,C会将它作为副本传递,并在它们之间应用一些C魔法,所以你没有像你想象的那样传递完全相同的东西.为了确定你正在做什么并避免一些额外的CPU工作和内存消耗,最好通过引用传递数组和对象(使用指针).所以你可以使用这样的东西,结果和原作相同:

#include 

void foo(char (*result)[10][7])
{
   // 'total' will be 70 = 10 * 7
   int total = sizeof(*result);

   // 'column' will be 7 = size of first row
   int column = sizeof((*result)[0]);

   // 'row' will be 10 = 70 / 7
   int row = total / column;

   printf("Total fields: %d\n", total);
   printf("Number of rows: %d\n", row);
   printf("Number of columns: %d\n", column);

}

int main(void) {

   char result[10][7] = {

       {'1','X','2','X','2','1','1'},
       {'X','1','1','2','2','1','1'},
       {'X','1','1','2','2','1','1'},
       {'1','X','2','X','2','2','2'},
       {'1','X','1','X','1','X','2'},
       {'1','X','2','X','2','1','1'},
       {'1','X','2','2','1','X','1'},
       {'1','X','2','X','2','1','X'},
       {'1','1','1','X','2','2','1'},
       {'1','X','2','X','2','1','1'}

   };

   foo(&result);

   return 0;
}


代码对我来说是自动解释的,但了解你.现在编辑答案.
没有解释的代码答案通常对未来的访问者非常无益.考虑编辑您的答案,以提供有关您的解决过程的更多信息/见解.
推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有