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

указатели и функции в с++ - C++

Восстановить пароль Регистрация
 
dearkato
7 / 7 / 1
Регистрация: 30.10.2011
Сообщений: 71
30.09.2012, 13:45     указатели и функции в с++ #1
Как сделать так, чтобы функция возвращала указатель на какой-либо элемент этой функции, а сам исходный элемент в mainе оставался неизменным?
Вот например мне необходимо отсортировать массив методом пузырька и вывести его на экран. С заменой первоначального массива я понимаю как сделать, а вот как сделать так, чтобы функция вернула указатель на новый массив, а самый первый остался таким же и чтобы я его потом еще могла вывести и наглядно сравнить с отсортированным?

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <conio.h>
void bsort (int* const, const int);
 
int main (void) {
    int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7};
    int i, n;
    n = sizeof(A)/sizeof(A[0]);
    puts("\n Data items in original order:");
 
    for (i = 0; i < n; i++)
        printf(" %3d", A[i]);
 
    bsort (A, n);
      puts("\n\n Data items in ascending order:");
    for (i = 0; i < n; i++)
      printf(" %3d", A[i]);
        
    printf("\n\n ... Press any key: ");
    _getch();
    return 0;
}
 
// Определение функции
void swap(int *pa, int *pb) {
    int temp;
    temp = *pa;
    *pa = *pb;
    *pb = temp;
}
void bsort (int *const arr, const int size) {
int pass,j; 
 
void swap (int*, int*);
 
for (pass = 0; pass < size - 1; pass++ ) 
{
    for (j = 0; j < size - 1; j++)
    {
        if (arr[j] > arr[j + 1])
        {
        swap(&arr[j], &arr[j+1]);
        }
     }
   }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2012, 13:45     указатели и функции в с++
Посмотрите здесь:

C++ Указатели функции
C++ Функции и указатели
указатели на функции C++
C++ Шаблонные функции и указатели на функции
Указатели на Функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
30.09.2012, 16:20     указатели и функции в с++ #2
функцию сортировки можно не трогать. достаточно сделать 2 одинаковые копии массивов. один массив отсортировать теми функциями, которые уже есть, их менять не надо. второй массив оставить без изменений. ну и потом вывести оба массива рядом.
если же прям пренепременно нужно, чтобы функция возвращала указатель на новый, то делается примерно то же, только в одтельной функции:
схематично так:
C++
1
2
3
4
5
6
7
8
9
10
int* CreateSortedArray(const int* arr, int size)
{
   int* newArray = new int[size];
   // тут копирование arr в newArray каким либо способом.
   
   // тут сортировка нового массива. 
   bsort(newArray, size);
 
   return newArray;
}
dearkato
7 / 7 / 1
Регистрация: 30.10.2011
Сообщений: 71
30.09.2012, 16:27  [ТС]     указатели и функции в с++ #3
думаю не прокатит, задание по указателям и функциям и нужно как-то устроить возврат значения отсортированного массива, при этом не изменяя исходного, а так задумка неплохая, если ничего другого не придумаю, то придется копию массива делать.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
30.09.2012, 16:29     указатели и функции в с++ #4
я привел пример функции, которая исходный массив не изменяет.
она создает новый, копирует в него данные исходного, потом этот новый сортируется и возаращается указатель на динамически-созданный массив.
Yandex
Объявления
30.09.2012, 16:29     указатели и функции в с++
Ответ Создать тему
Опции темы

Текущее время: 08:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru