Cin.getline(buffer,buflen)

done=(strlen(buffer)==0);

if(!done)

{

index=ataf(buffer); //перетворення рядка на число

cout<<"введiть значення типу float";

cin.getline(buffer,buflen);

/*введення значення в буфер*/

ref(index)=ataf(buffer);

}}

return 0;

}

double & ref (int index)

{if(index<0)index=0;

return array[index];}

Void showarray(void)

{cont<<"\n array:\n";

for(int i=0;i<SIZE;i++)

cout<<"["<<i<<"]"<<array[i]<<'\n';

}

Специфікатор INLINE

Специфікатор використовується для того, щоб компілятор розміщував код функції безпосередньо в місце її виклику. При цьому зростає швидкодія програми, але збільшується об'єктний код. Наприклад:

void notinline(void){}

inline void isinline(void){}

Main()

{printf("starting notinline\n");

for(long i=1;i<5000000;i++)notinline();

printf("starting isinline\n");

for(i=1;i<5000000;i++)isinline();}

З isinline функцiя виконується у кілька разів швидше.

Операції NEW і DELETE

Операція new служить для виділення пам'яті. Синтаксично допускається три способи її використання:

1) new type_name

Наприклад:

float*r=new float;

За такого оголошення r буде покажчиком на значення типу float, причому вказувати він буде на початок уже виділеної області пам'яті розміром float, на відміну від оголошення float*r;, де пам'ять не виділяється.

2) new(type_name)

Наприклад:

float*r=new(float);

Цей випадок аналогічний попередньому.

3) new type_name[expression]

Наприклад:

float*r=new float[20];

Операція Delete служить для звільнення пам'яті в купі. Відповідно до операції new, синтаксично допускаються такі способи її використання:

1) delete var_name;

Наприклад:

float*r=new float[20];

delete r;

2) delete[expr]var_name

Наприклад:

float*r=new float[20];

delete[20]r;

Зазначимо, що дія в першому та другому випадках аналогічна. Виділивши пам'ять, наприклад

float*r=new float[20];

можемо звільнити її будь-яким з таких способів:

delete[200]r; delete[20]r; delete[10]r; delete[2]r; delete[]r; delete r;

Покажчик на void

Покажчику на тип void можна присвоїти значення покажчика на будь-який базовий тип. Наприклад:

void*void_ptr;

int*int_ptr=0x256;

void_ptr=int_ptr;

int_ptr=void_ptr;//невiрно

Параметри типу void* найчастіше використовуються при написанні програмних компонент, поведінка яких не залежить від конкретних типів значень. Напишемо функцію, що міняє місцями дві змінні будь-яких типів *:

void swap(void*&item1,void*&item2)

{void*temp=item1;

item1=item2;

item2=temp;}

Main()

{int*i=new int,*j=new int;

*i=5;

*j=20;

swap(i,j);

print("*i=%d*j=%d\n",*i,*j);

float*y=new float;*x=new float;

*x=5.0;

*y=20.0;

swap(x,y);

printf("*x=%f*j=%f\n",*i,*j);}

У деяких версіях компілятора С++ (напр., Borland 3.11) ця функція не працює. Тоді необхідно явно вказувати перетворення типу до void*:

swap((void*)i,(void*)j);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: