Як можна динамічно визначити його розмірність
Відповідь неочікувана: ніяк. C/C++ не зберігає інформацію про розмірність масиву під час виконання, тому динамічно визначити можна тільки якщо зберігати її окремо самому.
Короткий лікнеп по масивах C/C++:
- ім'я масиву завжди, крім оператора sizeof, повертає посилання на перший елемент масиву. a == &a[0].
- немає багатовимірних масивів - є масиви масивів, масиви посилань і т.ін.
- масив масивів в пам'яті тотожний одновимірному масиву:
a[5][10] - те саме, що й a[50]. Адресація при цьому очевидна: a [ i ][j] == a [10*i+j].
- кількість елементів в статичному масиві можна визначити як sizeof(a)/sizeof(a[0]). Але в випадку масиву масивів це поверне кількість підмасивів, а не елементів! В вашому випадку можна записати sizeof(lineptr)/sizeof(char *), але тоді ви не отримаєте інформації про підрозміності. Ні, звісно, можна погратися в щось типу
char *lineptr[5][10];
int first_dim = sizeof(lineptr)/sizeof(lineptr[0]),
sec_dim = sizeof(lineptr[0])/sizeof(lineptr[0][0]);
Але ви певні, що вам воно треба? Тим більше, що для цього всього треба точно знати, що це масив масивів, а не масив масивів масивів.
Так, і ще є стандартні типи array і vector; може, із ними буде зручніше? Вони розмір зберігають.
Ну і
const int first_dim=5,
sec_dim=10;
char *lineptr[first_dim][sec_dim];