C++


 главная
 обо мне
 языки
 веб-дизайн
 гитара
 блок-флейта
 ссылки
 фотоальбом
 литература
 разное
 анекдоты
 макраме
 общение
 обновления



http://www.uralweb.ru/

Раскрути свой сайт

поэтический сайт Веры Степановой




Указатели в С++ (Продолжение)




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

Hosted by uCoz