Re: Массивы указателей с неопределенным размером
От: Erop Россия  
Дата: 07.11.07 22:49
Оценка: 3 (1)
Здравствуйте, unz0r, Вы писали:

U>
double **a;

U>fprintf(h, "%lf", aa[1][2]);

U>Почему вообще компилируется такой код? К какому элементу будет идти обращение, если размер строки нигде не определен?

Да просто тут всё. Это не массив массивов, как в случае
double v[N][M];
а массив указателей.

Для начала стоит разобраться с
double vv[N];
double *a = v;
Понимаешь ли ты в чём разница между v и a? И в чём между v[5] и a[5]?
Предположим, чо понимаешь. Тогда, наверное, легко поймёшь и двумерный случай.
double vv[N][M];
double **a;

В одном случае (когда массив массивов) vv[1] имеет тип double[M], а во втором случае (когда указатель на указатель) aa[1] имеет тип double*.

Короче говоря, в случае двумерного массива мы указатель на строку вычисляем, а в случае двойного указателя, мы указатели на строки храним. Не так компактно, конечно, зато быстро и можно выделять динамически
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.