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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Интеграл на си(не на С++) http://www.cyberforum.ru/cpp-beginners/thread256788.html
Помогите написать программу вычисляющую площадь под графиком x^2. Точность и промежуток задоваемым вручную. тремя методами : 1)метод Симпсона 2)метод прямоугольников 3)метод трапеций
C++ Динамическая память Найти в матрице а(n,n) наименьший элемент в каждом столбце и результат записать в вектор b(n).Сделать с функциями.(можно с обьяснениями и попроще кд пожалуйста)с динамической памятью,помогите,ато я... http://www.cyberforum.ru/cpp-beginners/thread256786.html
Проинициализировать массив случайными символами от A до Z C++
Здравствуйте!Я не могу понять,что тут не так..помогите разобраться! Задача: типа char размером в 4х11х3 элементов. Проинициализировать его случайными символами от A до Z. Вывести первые символы...
C++ Сформировать массив
Здравствуйте!Я не могу понять,что тут не так..помогите разобраться! Задача: типа char размером в 4х11х3 элементов. Проинициализировать его случайными символами от A до Z. Вывести первые символы...
C++ производные класса http://www.cyberforum.ru/cpp-beginners/thread256769.html
создать класс фигура с производными классами квадрат, треугольник , круг, которые вычисляют площадь и периметр... не особо понимаю -начал писать, но столько ошибок выходит! Класс Figure.h ,...
C++ класс-шаблон для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и вывода Создать класс-шаблон, содержащий поля для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и вывода элементов массива на экран, а так же для подсчета... подробнее

Показать сообщение отдельно
talis
792 / 544 / 37
Регистрация: 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.