В предыдущей статьи стало понятно, что указатель-это не страшно, и является
псевдонимом переменной, так как
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;
}