Форум программистов, компьютерный форум, киберфорум
Наши страницы

Работа с указателями - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать структуру с именем MARSH http://www.cyberforum.ru/cpp-beginners/thread613494.html
Прошу помощи в задании. Разработать структуру с именем MARSH, содержащую поля: • Название начального пункта маршрута; • Название конечного пункта маршрута; • Номер маршрута. Написать...
C++ Рекурсия - работает, нет результата Всем привет. У меня есть программа которая предназначена для Задан массив целых. Построить из них любую последовательность таким образом, чтобы последняя цифра предыдущего числа совпадала с первой... http://www.cyberforum.ru/cpp-beginners/thread613464.html
C++ Вывод переменной типа char
Переменная x типа char. x = 65; cout << x; Так выводиться "A". x = 64; cout << x+1;
Как определить существует ли файл? C++
Я использую if(FileExists(LoginReg)) { ofstream ofs(LoginReg); //ñîçäàòü ...
C++ Как подсчитать CRC! http://www.cyberforum.ru/cpp-beginners/thread613391.html
Уважаемые Форумчане! Как подсчитать CRC. Есть файл чтения EEProm. - :10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 :10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0...
C++ Создать динамический массив и вывести его на экран Напишите программу, в которой создается одномерный символьный динамический массив. Инициализируйте массив. Результат выведите на экран. подробнее

Показать сообщение отдельно
струна
4 / 4 / 1
Регистрация: 10.03.2011
Сообщений: 92
25.06.2012, 18:07  [ТС]
ребят, не сочтите за наглость, но выполняя остальное задание, опять появились указатели...

Содержательно сформулируйте действие, производимое функцией над массивом указателей. Напишите вызов функции для статических данных.
Пример выполнения тестового задания.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//------------------------------------------------------305-08.cpp
 
double * F(double *p[], int k) {
 
for ( int i=0; p[i]!=0; i++) ;  // Текущая размерность массива указателей
 
if (k>=i) return NULL;          // Больше текущей размерности - неудача
 
double *q=p[k];                            // Запомнить k- ый указатель
 
for (; k < i; k++)p[k] = p[k+1];  // Сдвинуть " хвост" на 1 к началу - удалить
 
return q;}                                        // k-ый и вернуть его
 
double a1=4,a2=7,a3=5,a4=1,*pp[]={&a1,&a2,&a3,&a4,NULL};
 
void main() { printf("\nУдален по n=2 ...%2.0lf\n",*F(pp,2));
 
for (int i=0; pp[i]!=NULL;i++) printf(" %2.0lf",*pp[i]);
 
}                                               // Выведет 5 ... 4,7,1.


Функция возвращает указатель на double. Поскольку она получает массив указателей, можно предположить, что он берется оттуда. Действительно, из массива копируется указатель, номер которого задан формальным параметром. То есть функция возвращает указатель по заданному логическому номеру. Первоначально подсчитывается текущая размерность структуры данных количество указателей в массиве. Если логический номер его превышает, возвращается NULL. И последнее. После запоминания k-го указателя все последующие указатели сдвигаются на 1 к началу, таким образом, выделенный указатель " затирается" . То есть функция исключает указатель по логическому номеру и возвращает его в качестве результата. Для задания статической структуры данных сначала определяются указуемые переменные типа double, а замет массив указателей инициализируется их адресами.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//------------------------------------------------------305-09.cpp
 
 
//------------------------------------------------------- 2
 
void F2(double *p[])
 
{ int i,k;
 
     do {
 
     k=0;
 
     for (i=1; p[i]!=NULL; i++)
 
          if (*p[i-1] > *p[i])
 
          { double *dd;
 
          dd=p[i]; p[i]=p[i-1]; p[i-1]=dd; k++;
 
          }
 
     } while (k);}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//----------------------------------------------------- 12
 
char *F12(char **p[], int n)
 
{ int k,i,j;
 
for (k=i=0; p[i]!=NULL; i++)
 
     for (j=0; p[i][j] !=NULL; j++, k++)
 
          if (k==n) return(p[i][j]);
 
return(NULL);}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru