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

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

Войти
Регистрация
Восстановить пароль
 
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
#1

Возврат из функции другого адреса - C++

13.03.2011, 23:18. Просмотров 595. Ответов 3
Метки нет (Все метки)

Собственно сабж. Есть функция - поиска минимального элемента с помощью указателей.
Функция возвращает другой адрес, почему? Ведь в функции указателю min_element присваиваю адрес массива arr. Помогите разобраться. Спасибо.

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
#include <iostream>
 
using namespace std;
 
int * min(int *A, int size);
 
int main()
{
    const int s=10;
    int arr[s] = {7,5,3,8,-1,9,1,6,8,4}, *p;
    
    p=arr;
    p=min(arr,s);
    
    //cout << *p << "\n";
    //cout << "address p = " << p << "\n";
    //cout << "address arr = " << arr << "\n\n\n";
    for(int i=0; i<10; i++)
        cout << "addredd arr[" << i <<"] == " << &arr[i] << "\n";
    cout << "\n\n";
    for(int i=0; i<10; i++)
        cout << "addredd p[" << i <<"] == " << &p[i] << "\n";
    
    return 0;
}
int * min(int *A, int size)
{
    int *min_element;
    
    min_element=A;      
    min_element = &A[0];
    for(int i=1; i<size; i++)
        if(A[i] < *min_element) 
               min_element = &A[i];         
    
    return min_element;
}
Добавлено через 13 минут
Извените если не правильно сказал, имелось ввиду, что функция возвращает верное значение, но я сравниваю также и адреса. Так вот, адрес минимального элемента массива arr отличается от адреса массива р.

Добавлено через 20 минут
неужели ни кто не подскажет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 23:18     Возврат из функции другого адреса
Посмотрите здесь:

Возврат копии структуры из другого класса - C++
Как можно копию структуры из одного класса передать в другой? (именно чтоб она изначально в private была) Сам только до такой вариант...

Возврат строки из функции - C++
Здравствуйте. Пишу программу для работы с процессами, мне нужно, чтобы в функцию передавался PID, а возвращалось имя, но выводятся...

Возврат boost::any из функции - C++
virtual bool write_value(const string_type&amp; name_value, const boost::any&amp; value) { try { pt.put(name_value, value); // load...

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

Неверный возврат из функции - C++
Краткий экскурс. Есть универсальный класс Matrix&lt;TYPE&gt;, описание его выглядит вот так: /*Matrix.h*/ #ifndef _MATRIX_CLASS ...

Возврат объекта из функции - C++
Здравствуйте. Написал в Code.Blocks на C++ вот такой код (привожу только часть кода, остальное на мой взгляд излишне). class Soldier...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
13.03.2011, 23:18     Возврат из функции другого адреса #2
grrrrr, если я правильно понял вашу проблему, то так. После вызова min() ваш int * p будет указывать на элемент массива arr, у которого минимальное значение. А этот элемент ведь находится не в начале массива, вот и адрес у него другой. Смотрите, вот массив в памяти:

00 00 00 07
00 00 00 05
00 00 00 03
00 00 00 08
FF FF FF FF
00 00 00 09
00 00 00 01
00 00 00 06
00 00 00 08
00 00 00 04


FF FF FF FF - это -1 в шестнадцатеричной записи. Почему так - отдельный вопрос. Если будет интересно - спросите, не хочу сейчас на это отвлекаться. В общем, он - минимальный. Вот что у вас получается после вызова min():

00 00 00 07 <<< НАЧАЛО МАССИВА ЗДЕСЬ
00 00 00 05
00 00 00 03
00 00 00 08
FF FF FF FF <<< int * p указывает на этот элемент
00 00 00 09
00 00 00 01
00 00 00 06
00 00 00 08
00 00 00 04


Вот чуть изменённый вариант вашей программы (для наглядности):

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
#include <iostream>
 
using namespace std;
 
int * min(int *A, int size);
 
int main()
{
        const int s=10;
        int arr[s] = {7,5,3,8,-1,9,1,6,8,4}, *p;
        
        p = arr; // это не нужно
        p = min(arr, s); // ПОСМОТРИТЕ НА ЭТУ СТРОЧКУ
        
        for( int i = 0; i < 10; i++ )
        {
           cout << "arr[" << i << "]:\t" << &arr[i] << ": " << arr[i];
           
           if( &arr[i] == p ) // сравнение адресов; если p указывает сюда
              cout << " <---- *p";
           
           cout << endl;
        }
        
        cout << "\n*p:\t" << p << ": " << *p << endl;
        
        system( "pause > nul" );
        
        return 0;
}
 
int * min(int *A, int size)
{
        int *min_element;
        
        min_element=A;          
        min_element = &A[0];
        
        for(int i=1; i<size; i++)
                if(A[i] < *min_element) 
                   min_element = &A[i];        
        
        return min_element;
}
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
13.03.2011, 23:36  [ТС]     Возврат из функции другого адреса #3
talis, кажется я понял.

C++
1
2
p=arr;     //здесь я указателю р указываю на первый элемент массива arr.
p=min(arr,s); //а здесь я присваиваю указателю р адрес минимального элементы массива arr.
потому и не сходились мои адреса arr и р.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2011, 23:38     Возврат из функции другого адреса
Еще ссылки по теме:

Возврат массива из функции - C++
Здравствуйте, Не пойму почему не работает данный код. Пишет cannot convert 'std::string*' to 'int*' in return По теории я жду...

Возврат строки из функции - C++
//char perfomers; //char _perfomers; char GetPerfomers(){strcpy(_perfomers,perfomers);return *_perfomers;} Есть у меня такая...

Возврат массива из функции - C++
В объекте есть массив int state;, который мне нужно из него вытащить. Вижуал показывал ошибку, когда я пытался вернуть указатель state в...

Возврат массива из функции - C++
Есть задача: используя функции, вычислить количество элементов заранее введённых массивов, которые кратны Х, и переписать в отдельный...


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

Или воспользуйтесь поиском по форуму:
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
13.03.2011, 23:38     Возврат из функции другого адреса #4
Да, всё верно. Только зачем вы делаете p = arr? Это же бессмысленно, он в следующей строчке переписывается значением, возвращённым из min(). И в min() вот эти две строчки

C++
1
2
min_element=A;          
min_element = &A[0];
... делают одно и то же. Первая берёт адрес начала массива, а вторая - адрес нулевого элемента массива, то есть того же самого начала массива. Зачем?..

Удачи.
Yandex
Объявления
13.03.2011, 23:38     Возврат из функции другого адреса
Ответ Создать тему
Опции темы

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