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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
#1

Указатели и ссылки? - C++

15.01.2013, 15:40. Просмотров 261. Ответов 4
Метки нет (Все метки)

Ниже приведёна программы которая вызывает функцию. В функции происходит следующее создаются 2 массива в которые записыватся чётные и нечётные числа соответственно. Не понимаю следующего, если я передаю в функцию просто указатели на массивы int* first, int* second, то в нутри функции создаются динамические массивы и после окончания работы функции указатели снова становятся нулевыми, а если передать ссылки на указатели (int*& first, int*& second) тогда всё работает должным образом, созданные массивы после окончания работы функции остаюся доступными.
Почему указатели после работы функции обнуляюся? Они же созданы вне функции и значения должны были бы остаться, ведь одним из их предназначения и есть передача их в функции как параметров и манипуляции с их помощью?

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
47
48
49
50
51
52
#include<time.h>
#include<iostream>
using namespace std;
void sort(int arry[], int size, int*& first, int*& second, int& sizeFirstLink, int& sizeSecondLink );
void main()
{
    const int size = 10;
    int arry[size];
    int* first = NULL;
    int* second = NULL;
    int i = 0, sizeFirst = 0, sizeSecond = 0;
    int& sizeFirstLink = sizeFirst;
    int& sizeSecondLink = sizeSecond;
    srand (time(NULL));
    for(int i = 0; i<10; i++) arry[i] = rand()%10 + 1;
    for(int i = 0; i<10; i++) cout<<arry[i]<<" ";
    cout<<endl;
    sort(arry, size, first, second, sizeFirstLink, sizeSecondLink );
    for(int i = 0; i<sizeFirst; i++) cout<<first[i]<<" ";
    cout<<endl;
    for(int i = 0; i<sizeSecond; i++) cout<<second[i]<<" ";
        cout<<first<<" "<<second<<endl;
        cout<<sizeFirst<<" "<<sizeSecond<<endl;
        cout<<sizeFirstLink<<" "<<sizeSecondLink<<endl;
}
void sort(int arry[], int size, int*& first, int*& second, int& sizeFirstLink,int& sizeSecondLink )
{
    int i, f=0, s=0;
    for(i = 0; i<size; i++)
        arry[i]%2 ? sizeFirstLink++: sizeSecondLink++;
    first = new int[sizeFirstLink];
    second = new int[sizeSecondLink];
    for(i = 0; i<size; i++)
    {
        if(arry[i]%2)
        {
            first[f]=arry[i];
            f++;
        } 
        else 
        {
            second[s] = arry[i];
            s++;
        }
    }
    for(int i = 0; i<sizeFirstLink; i++) cout<<first[i]<<" ";
    cout<<endl;
    for(int i = 0; i<sizeSecondLink; i++) cout<<second[i]<<" ";
        cout<<endl;
    cout<<first<<" "<<second<<endl;
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2013, 15:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели и ссылки? (C++):

Ссылки и указатели - C++
Добрый день. Возможно было. В чем существенная разница между передачей данных в функцию по ссылке или указателю. В каких случаях вы бы...

Указатели и ссылки - C++
Собственно, не могу до конца осознать как это работает, вот пример из вики(комменты входят в пример) int n = 6; // Объявление...

Указатели и ссылки [С++] - C++
Всем привет. я тут программу делаю. Цель: определить,принадлежит ли точка заданному промежутку(а точнее лежит внутри или снаружи фигуры)....

Ссылки и указатели - C++
Добрый день, не могу понять чем помогают при использовании указатели и ссылки? Есть код на c++ #progma once class well { ...

Указатели и ссылки c++ - C++
Здравствуйте! Не могли бы вы объяснить как можно использовать ссылки и указатели c++ на практике? Я не пойму для чего они нужны!

Указатели и ссылки - C++
Экспериментируя с указателями пришел к вот таким выводам: int a; //переменная int *b; //указатель int &amp;c = a //ссылка на &lt;a&gt; ...

4
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
15.01.2013, 15:49 #2
Цитата Сообщение от Alexxx7 Посмотреть сообщение
Почему указатели после работы функции обнуляюся? Они же созданы вне функции и значения должны были бы остаться, ведь одним из их предназначения и есть передача их в функции как параметров и манипуляции с их помощью?
Потому что передается копия указателя.
1
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
15.01.2013, 16:00  [ТС] #3
Теперь понимаю, ну да указатели в функции хоть и создали динамические массивы после выхода из неё дальше равны нулю. Массивы созданы и потеряны. Если бы они указывали на массивы созданные до передачи в функцию всё было бы нормально, в функции просто через них поманипулировали со значениями и всё, они как указывали на массив так бы на него же и указывали. А ссылка позволяет присвоить указателю новое значение, не в созданную для функции копию а непосредственно по адресу оригенального указателя.
Спасибо, а то я уже нафантазировал себе фигни всякой.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
15.01.2013, 16:02 #4
Цитата Сообщение от Alexxx7 Посмотреть сообщение
А ссылка позволяет присвоить указателю новое значение, не в созданную для функции копию а непосредственно по адресу оригенального указателя.
Кроме ссылки можно еще передавать двойной указатель.
0
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
15.01.2013, 16:08  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Кроме ссылки можно еще передавать двойной указатель.
ну всё новая тема для раздумий, спасибо буду осмыслять
0
15.01.2013, 16:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2013, 16:08
Привет! Вот еще темы с ответами:

Ссылки vs Указатели - C++
Почему ссылки считаются более хорошим средством, чем указатели? Ведь если человек будет использовать сторонние классы, он может не...

Указатели и Ссылки - C++
извеняюсь,но никак не могу понять. int sum(int* inLeft, int* inRight) { if(inLeft == inRight) return *inLeft; ...

Указатели и ссылки - C++
Используя вместо самой переменной указатель на нее написать программу в соответствии с заданием: Вычислить y = cos|x3-x2|.

Ссылки, указатели - C++
Доброго времени. Как, используя ссылки, указатели и, возможно, другие приемы сделать что-то вроде этого?: int a = 1; int b = 2; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru