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

Возврат из функции другого адреса - 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. Вывести первые символы строк (строк всего 44). Мой код проги: #include <iostream.h> #include <cstdlib> void main() { int n; char m;
C++ Сформировать массив
Здравствуйте!Я не могу понять,что тут не так..помогите разобраться! Задача: типа char размером в 4х11х3 элементов. Проинициализировать его случайными символами от A до Z. Вывести первые символы строк (строк всего 44). Мой код проги: #include <iostream.h> #include <cstdlib> void main() { int n; char m;
C++ производные класса http://www.cyberforum.ru/cpp-beginners/thread256769.html
создать класс фигура с производными классами квадрат, треугольник , круг, которые вычисляют площадь и периметр... не особо понимаю -начал писать, но столько ошибок выходит! Класс Figure.h , Circle.h , main .cpp.... так или нет? в h описание , а запуск в main ? помогите разобраться с одним видом хотя бы... пож!
C++ класс-шаблон для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и вывода Создать класс-шаблон, содержащий поля для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и вывода элементов массива на экран, а так же для подсчета суммы элементов массива, расположенных между первым и последним отрицательными элементами. Продемонстрировать работу методов класса Вроде бы успешно откомпелировал, но не работает, запращивает: ... подробнее

Показать сообщение отдельно
talis
 Аватар для talis
789 / 541 / 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;
}
 
Текущее время: 22:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru