Я хотел бы знать, как получить массив размер столбцов и строки. Например, это было бы что-то вроде этого:
int matrix[][] = { { 2, 3 , 4}, { 1, 5, 3 } }
Размер этого составил бы 2 x 3. Как я могу вычислить это без включения других библиотек, но stdio или stdlib?
Это довольно ограниченное использование, но это возможно с помощью sizeof
.
sizeof(matrix) = 24 // 2 * 3 ints (each int is sizeof 4)
sizeof(matrix[0]) = 12 // 3 ints
sizeof(matrix[0][0]) = 4 // 1 int
Итак,
int num_rows = sizeof(matrix) / sizeof(matrix[0]);
int num_cols = sizeof(matrix[0]) / sizeof(matrix[0][0]);
Или определите свой собственный макрос:
#define ARRAYSIZE(a) (sizeof(a) / sizeof(a[0]))
int num_rows = ARRAYSIZE(matrix);
int num_cols = ARRAYSIZE(matrix[0]);
Или даже:
#define NUM_ROWS(a) ARRAYSIZE(a)
int num_rows = NUM_ROWS(matrix);
#define NUM_COLS(a) ARRAYSIZE(a[0])
int num_cols = NUM_COLS(matrix);
Но имейте в виду, что вы не можете передать эту матрицу int [] []
, а затем использовать трюк с макросами. К сожалению, в отличие от языков более высокого уровня (java, python), эта дополнительная информация не передается вместе с массивом (вам понадобится структура или класс в C ++). Переменная matrix
просто указывает на блок памяти, в котором находится матрица.
sizeof (matrix)
даст вам общий размер массива в байтах. sizeof (matrix [0]) / sizeof (matrix [0] [0])
дает вам размер внутреннего массива, а sizeof (matrix) / sizeof (matrix [0])
должен быть внешним размером.
Пример для размера:
#include <stdio.h>
#include <conio.h>
int array[6]= { 1, 2, 3, 4, 5, 6 };
void main() {
clrscr();
int len=sizeof(array)/sizeof(int);
printf("Length Of Array=%d", len);
getch();
}
Это не может быть "что-то вроде этого". Синтаксис, включающий две (или более) последовательные пустые квадратные скобки [][]
никогда не является допустимым в языке Си.
Когда вы объявляете массив с инициализатором, только первый размер может быть опущен. Все остальные размеры должны присутствовать в явном виде. Поэтому в вашем случае второй размер может быть 3
int matrix[][3] = { { 2, 3, 4 }, { 1, 5, 3 } };
если вы хотели, чтобы он был 3. Или он может быть 5, если вы так хотите
int matrix[][5] = { { 2, 3, 4 }, { 1, 5, 3 } };
Другими словами, вы всегда уже будете "знать" все размеры, кроме первого. Это невозможно обойти. И все же, если вы захотите "вспомнить" его где-то внизу кода, вы можете получить его как
sizeof *matrix / sizeof **matrix
Что касается первого размера, вы можете получить его как
sizeof matrix / sizeof *matrix