Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для grrrrr
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265

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

13.03.2011, 23:18. Показов 1505. Ответов 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 минут
неужели ни кто не подскажет?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2011, 23:18
Ответы с готовыми решениями:

Передача указателя в функцию, присвоение адреса переменной и возврат
Добрый день, подскажите, почему в отладке в функции указателю адрес переменной присваивается корректно, но при возврате указатель смотрит...

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

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

3
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
13.03.2011, 23:18
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;
}
1
 Аватар для grrrrr
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265
13.03.2011, 23:36  [ТС]
talis, кажется я понял.

C++
1
2
p=arr;     //здесь я указателю р указываю на первый элемент массива arr.
p=min(arr,s); //а здесь я присваиваю указателю р адрес минимального элементы массива arr.
потому и не сходились мои адреса arr и р.
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
13.03.2011, 23:38
Да, всё верно. Только зачем вы делаете p = arr? Это же бессмысленно, он в следующей строчке переписывается значением, возвращённым из min(). И в min() вот эти две строчки

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

Удачи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.03.2011, 23:38
Помогаю со студенческими работами здесь

Отправка письма с другого адреса
подскажите пожалуйста возможно ли на LotusScript сделать отправку сообщения не от текущего пользователя, а от любого другого, указаного в...

ICMP reply возвращается с другого адреса
Здравствуйте. Проблема такая - пингуем допустим с 10.104.3.27 адрес 10.104.3.1, пинг не возвращается (пишет через раз, что назначение...

Как привязать адреса с другого сервера
Здравствуйте, уважаемые! Есть два сервера. сервер А eth0:0 - public ip x.x.x.x сервер Б eth0:1 - public ip y.y.y.y ...

Достать куки другого url адреса
Скрипт подгружается с другого url aдреса на том же сайте. Возможно ли достать значение куков которые были сохранены на определенной...

Возврат 2 значений из функции с одним вызовом этой же функции
Вообщем где то в какой то игре была хукнута одна функция int function(int arg1,int arg2,int arg3); суть в чем int...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru