Это работает для меня (комментарии объясняют почему):
#include <stdio.h>
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 между ними, поэтому вы не передаете точно то же самое, что вы думаете. Чтобы быть уверенным в том, что вы делаете, и избежать дополнительной работы ЦП и потребления памяти, лучше передавать массивы и объекты по ссылке (используя указатели). Таким образом, вы можете использовать что-то вроде этого с теми же результатами, что и оригинал:
#include <stdio.h>
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;
}
person
emi
schedule
07.12.2015