|
Указатели в С++ (Продолжение)В предыдущей статьи стало понятно, что указатель-это не страшно, и является псевдонимом переменной, так как int a; a=10; int *c; c=&a; Теперь "а" == "*с" то есть псевдонимы, только в первом случае прямая адресация, а во втором косвенная. Тогда встаёт вопрос.- А зачем тогда вообще нужны эти указатели. Ответ простой - к сожалению в языке С есть ограничения, которые нельзя обойти без использования указателей, например нельзя организовать массив из функций и многое другое. Сейчас разберём пример использования функции malloc. Функция malloc выделяет блок памяти, нужного размера, и возвращает указатель на начало блока. Тип данных на который ссылается указатель всегда void*, поэтому этот тип данных может быть приведен к желаемому типу данных. Для написания демки я использовал C++Builder, написал консольное приложение. В открывшееся окошко программы нужно вставить строчки #include <iostream> #include <cstdlib> Ну вот можно продолжать. int leng; // Объявляем переменную для хранения длины выделяемого блока cout << "Enter the length of the string:- "; cin >> leng; // Ввод длины char * al = (char*) malloc(leng + 1);// Объявляем указатель типа символ и ЯВНО приводим тип указателя возвращаемого функцией! Не забываем, что указатель тоже переменная и на него распространяется преобразование типов. for (int i = 0; i < leng; i++) al[i] = rand() % 26 + 'a'; // В цикле заполняем блок случайными символами al[leng]='\0'; // Дописываем в конец нуль символ строки. Обратите внимание, что блок выделенный malloc по сути является обычным массивом! cout << "String:- " << al << "\n";// Напечатаем строчку free(al); // Освободим память, так как этот блок нам больше не нужен. Далее полный текст и скрин программульки. Удачи всем в освоении С и С++ !!! #pragma hdrstop #include <condefs.h> #include <iostream> #include <cstdlib> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char **argv) { int leng; cout << "Enter the length of the string:- "; cin >> leng; char * al = (char*) malloc(leng + 1); for (int i = 0; i < leng; i++) al[i] = rand() % 26 + 'a'; al[leng]='\0'; cout << "String:- " << al << "\n"; free(al); system("Pause"); return 0; } © ЯКВ-мистери 2000-2014 kestrens@mail.ru
|