Фоб » 11 дек 2007, 14:52
Правильно пишет Romeo.
Разве что добавлю, что с помощью макросов можно создать иллюзию динамического создания переменных.
Макросы в С++ - это вроде как функции, которые работают на этапе компиляции, формируя часть кода.
Например:
Код: Выделить всё
#define defarr(t, name, j, n, v) t* name ## j = new t[n * j]; for (int i = 0; i < n * j; i++) (name ## j)[i] = v;
defarr(int, m, 1, 5, 0);
defarr(int, m, 2, 5, 0);
defarr(int, m, 3, 5, 0);
На этапе компиляции вместо строк defarr(), появляется код создания массивов int m1[5], int m2[10], int m3[15], и заполнения их нулями.
А чтобы на этапе исполнения "получать данные переменной, имя которой находится в другой переменной", используйте указатели, и сможете "получать данные, адрес которых находится по другому адресу" (то же самое, но в терминах системного программирования).
Правильно пишет Romeo.
Разве что добавлю, что с помощью макросов можно создать иллюзию динамического создания переменных.
Макросы в С++ - это вроде как функции, которые работают на этапе компиляции, формируя часть кода.
Например:
[code]
#define defarr(t, name, j, n, v) t* name ## j = new t[n * j]; for (int i = 0; i < n * j; i++) (name ## j)[i] = v;
defarr(int, m, 1, 5, 0);
defarr(int, m, 2, 5, 0);
defarr(int, m, 3, 5, 0);
[/code]
На этапе компиляции вместо строк defarr(), появляется код создания массивов int m1[5], int m2[10], int m3[15], и заполнения их нулями.
А чтобы на этапе исполнения "получать данные переменной, имя которой находится в другой переменной", используйте указатели, и сможете "получать данные, адрес которых находится по другому адресу" (то же самое, но в терминах системного программирования).