Алгохитрости-5 Указатели Динамические переменные

Слайд 2

Практические занятия Указатели на константы Чем отличается int * const от

Практические занятия
Указатели на константы

Чем отличается int * const от int const

*. Возможен ли указатель int const * const ?

#include
main ()
{ int number = 5;
int var = 10;
int *const prt = &number;
*prt = 100; // Допустимо
prt = &var; // Ошибка
return 0; }

Форма int * const означает константность указателя: указатель объявленный с этим определением, не может менять адрес, на который он указывает.

Форма int const * означает константность самого значения, на которое адресует указатель: адрес, на который указывает указатель можно менять, но изменить значение содержимого адреса при помощи указателя невозможно.

#include
main ()
{ int number = 5;
int var = 10;
int const * prt = &number;
prt = &var; // Допустимо
var = 15;
*prt = 100; // Ошибка
return 0; }

Если модификации не должен подвергаться ни сам указатель, ни значение, на которое он указывает, то допускается использование типа int const * const

#include
main ()
{ int number = 5;
int var = 10;
int const *const prt = &number;
*prt = 100; // Ошибка
prt = &var; // Ошибка
return 0; }

И+ПРГ

Слайд 3

Практические занятия Найти ошибку #include // Переменная var получает целое значение

Практические занятия

Найти ошибку

#include
// Переменная var получает целое значение и используется

для инициализации указателя prt
main ()
{ int var, *prt;
var = 10;
*prt = var;
cout <<"\n Значение prt -> " <<* prt);
return 0; }

#include
#include
main ()
{
char input [80];
char *current;
int i = 1;
cout << "Введите строку ->";
gets (input);
for (current=input; *current;
current++, i++)
{
cout << *current;
if (! (i % 4))
cout << endl;
}
return 0;
}

Ошибка заключается в следующем:
Указатель не инициализирован, он не указывает ни на одну переменную, под которую выделена статическая или динамическая память. Программа будет работать, но ошибка может проявиться сбоями программы, причём не сразу, а через некоторое время после начала работы.

#include
// ……………………………………………………………..
main ()
{ int var, *prt;
prt = new int;
var = 10;
*prt = var;
cout <<"\n Значение prt -> " <<* prt);
delete prt;
return 0; }

НАДО:

Ввести текстовую строку и вывести её на экран по 4-е символа в одной строке

И+ПРГ

Слайд 4

Практические занятия Разбить текстовую строку по символу пробела Без использования указателей

Практические занятия

Разбить текстовую строку по символу пробела

Без использования указателей

С использованием

указателей

#include
#include
#include (string.h>
int main()
{
char input[80];
char current[80];
int i, j;
cout << "Введите строку -> ";
gets(input);
for(i = 0; i < strlen (input); i++)
{
for(j = 0; input[i] != ' ' && input[i];
j++, i++)
{
current[j] = input[i];
}
current[j] = '\0';
cout << current << endl;
} return 0;
}

#include
#include
#include (string.h>
int main()
{ char input[80];
char current[80];
char *prt, *prt_cur;
cout << "Введите строку -> ";
gets(input);
prt = input;
while(*prt)
{ prt_cur = current;
while(*prt != ' ' && *prt)
{ *prt_cur = *prt;
prt_cur++;
prt++; }
// Пропускаем пробел
if(*prt) prt++;
*prt_cur = '\0';
cout << current << endl; }
return 0; }

И+ПРГ