Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Разработать структуру с именем MARSH http://www.cyberforum.ru/cpp-beginners/thread613494.html
Прошу помощи в задании. Разработать структуру с именем MARSH, содержащую поля: • Название начального пункта маршрута; • Название конечного пункта маршрута; • Номер маршрута. Написать программу, выполняющую следующие действия: • Ввод с консоли данных в массив структур MARSH; • Вывод на консоль информации о маршрутах, которые начинаются или оканчиваются в пункте, название которого введено...
C++ Рекурсия - работает, нет результата Всем привет. У меня есть программа которая предназначена для Задан массив целых. Построить из них любую последовательность таким образом, чтобы последняя цифра предыдущего числа совпадала с первой цифрой следующего. Программа работает, но при определенных входных данных, она отказывается возвращать результат. Я потратил пол дня, пытаясь найти причину, прошу у вас помощи. КОД: #include... 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); //ñîçäàòü ofs << account; ofs << PasswordReg << endl; ofs.close(); } ...
C++ Как подсчитать CRC! http://www.cyberforum.ru/cpp-beginners/thread613391.html
Уважаемые Форумчане! Как подсчитать CRC. Есть файл чтения EEProm. - :10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 :10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 :10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 :10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 :10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 :10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 :10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0...
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);}
 
Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru