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

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

Войти
Регистрация
Восстановить пароль
 
 
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
#1

Функции и указатели - C++

08.05.2013, 21:55. Просмотров 714. Ответов 22
Метки нет (Все метки)

Здравствуйте Господа !!!
Вопрос банальный и честно говоря даже стыдно его тут задавать , но не могу уже минут 40 понять почему не получается . Итак допустим имеем функцию которая возвращает двух мерный массив -
C++
1
2
3
4
5
6
7
8
int Mas(){
    
 int n[5][2]={5,1,9,7,2,
                8,3,6,4,9};
                
       return **n;   
    
}
и в основной программе есть указатель на эту функцию , на сколько я предполагал по первому (нулевому) эллементу массива можно раскалупать и весь массив , НО у меня получается так , что первый элемент выводится нормально , а вот остальные какие то левые значения (первоначально была мысль сделать 2-х мерный массив и присвоить ему значения из Mas() , но это тоже не сработало), вот весь код программы -
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
#include <cstdlib>
#include <iostream>
 
int Mas(){
    
 int n[5][2]={5,1,9,7,2,
                8,3,6,4,9};
                
       return **n;   
    
}
 
int main(int argc, char *argv[])
{
    
 
 
    int *u ;
    
    u = new int [10];
    
    *u=Mas();
    
    for(int a=0;a<10;a++){
 
           std :: cout<<u<<" = "<<*u<<"\n";
            
            *u++;
            
            }
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 21:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функции и указатели (C++):

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

Указатели и массивы. Указатели и функции - C++
Никак не разберусь с указателями на функцию. Пишу в Visual Studio. Надо написать функцию Compress() с использованием указателей, которая...

Распечатать таблицы значений функций cox (x) и на отрезке [a; b] с шагом h, развив функции в ряд Тейлора и используя указатели на функции - C++
Распечатать таблицы значений функций cox (x) и на отрезке с шагом h, развив функции в ряд Тейлора и используя указатели на функции.

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Шаблонные функции и указатели на функции - C++
Помогите доделать и исправить... Задание: 1. Создать структуру Прямоугольник, с полями Высота и Ширина. Создать массив объектов типа...

Указатели на функции - C++
Подскажите должен ли работать этот код(самый первый). И как он работает

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.05.2013, 21:59 #2
Во-первых нельзя вернуть локальный для функции массив.
Во-вторых ты его не возвращаешь, ты возвращаешь только первый элемент.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
08.05.2013, 22:00 #3
даже незнаю с чего начать - неправильно тут чуть больше, чем все.

Цитата Сообщение от Игорь с++ Посмотреть сообщение
функцию которая возвращает двух мерный массив -
функция возвращает int
Цитата Сообщение от Игорь с++ Посмотреть сообщение
и в основной программе есть указатель на эту функцию
где?

Цитата Сообщение от Игорь с++ Посмотреть сообщение
на сколько я предполагал по первому (нулевому) эллементу массива можно раскалупать и весь массив
как? если это всего лишь элемент (другое дело адрес первого элемента).
Цитата Сообщение от Игорь с++ Посмотреть сообщение
НО у меня получается так , что первый элемент выводится нормально
потому что по адресу u пишется значения, возвращенное из Mas(), а дальше мусор.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
08.05.2013, 22:01  [ТС] #4
Цитата Сообщение от lazybiz Посмотреть сообщение
ты его не возвращаешь, ты возвращаешь только первый элемент
ну а по первому нельзя его раскалупать ?

Добавлено через 1 минуту
Господа как переделать , покажите пример
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.05.2013, 22:03 #5
Передавай в функцию указатель на массив, а в функции его заполняй.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
08.05.2013, 22:05  [ТС] #6
Цитата Сообщение от lazybiz Посмотреть сообщение
Передавай в функцию указатель на массив, а в функции его заполняй.
это понятно , а вот что бы сохранить ту первоначальную мысль , как то можно ?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.05.2013, 22:06 #7
Цитата Сообщение от Игорь с++ Посмотреть сообщение
а вот что бы сохранить ту первоначальную мысль
А я её не понял...
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
08.05.2013, 22:08  [ТС] #8
или я заморочился о чём то не осуществимом?

Добавлено через 2 минуты
Цитата Сообщение от lazybiz Посмотреть сообщение
А я её не понял...
Так попробую на пальцах - создаём функцию которая возвращает 2-х мерный массив , далее в основной программе надо получить то , что отдала функция (2-х мерный массив)
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.05.2013, 22:14 #9
Можно выделить динамически память под массив в функции. Заполнить его и вернуть как какой-нибудь другой тип, а потом преобразовать, так сказать в двумерный.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
08.05.2013, 22:16  [ТС] #10
Цитата Сообщение от lazybiz Посмотреть сообщение
Можно выделить динамически память под массив в функции. Заполнить его и вернуть как какой-нибудь другой тип, а потом преобразовать, так сказать в двумерный.
не понял , кусок кода можно ?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
08.05.2013, 22:17 #11
вот слегка измененный твой код
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
#include <cstdlib>
#include <iostream>
 
int* Mas(int a = 0){
    
 int n[20]={5,1,9,7,2,8,3,6,4,9};
                
       return a == 10 ? n : Mas(++a);   
    
}
 
int main(int argc, char *argv[])
{
    
 
 
    int *u ;
        
    u=Mas();
    
    for(int a=0;a<10;a++){
 
           std :: cout<<u<<" = "<<*u<<"\n";
            
            ++u;
            
    }
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
сразу говорю - это в корне неправильно!!!! Работоспособность проверял в MSVS 2012, за другие компиляторы не ручаюсь (оно вообще работать не обязанно).
Чтоб объяснить как и почему оно все же работает, придется очень много писать. Поэтому ты лучше спрашивай что непонятно, тогда может писанины меньше будет.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
08.05.2013, 22:17  [ТС] #12
короче как я понял только через заднее место можно это сделать ?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
08.05.2013, 22:18 #13
Цитата Сообщение от Игорь с++ Посмотреть сообщение
возвращает 2-х мерный массив
у тебя в первом посте одномерный массив, хотя и объявлен как двумерный.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
08.05.2013, 22:22  [ТС] #14
Kastaneda, спасибо работает на gcc , но не понятна ваша фраза -
Цитата Сообщение от Kastaneda Посмотреть сообщение
сразу говорю - это в корне неправильно!!!!
Добавлено через 48 секунд
блин , чё то я совсем уже
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.05.2013, 22:24 #15
Примерно об этом я говорил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
int *test() {
    int *a = new int [2 * 2];
    a[0] = 0;
    a[1] = 1;
    a[2] = 2;
    a[3] = 3;
    return a;
}
 
#define GET_VAL( i, j ) test()[2*i+j]
 
int main()
{
    cout << GET_VAL( 0, 0 ) << endl;
    cout << GET_VAL( 0, 1 ) << endl;
    cout << GET_VAL( 1, 0 ) << endl;
    cout << GET_VAL( 1, 1 ) << endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 22:24
Привет! Вот еще темы с ответами:

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

Указатели на функции - C++
Расшифруйте пожалуйста эту запись, что она значит, с переменным кол. аргументом понял, а эту нет: long int (*func4(int))(void) Если не...

Указатели и функции - C++
Рботаю с SDL2, пытаюсь распределить код по функциям, чтобы не месить кашу в main. Задумывалось иинциализировать указатели в отдельной...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.05.2013, 22:24
Ответ Создать тему
Опции темы

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