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

Как присвоить значение возвращаемое функцией? - C++

Восстановить пароль Регистрация
 
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:09     Как присвоить значение возвращаемое функцией? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream.h>
char* abc(int num){
    static char masiv[1];
    masiv[0] = num+'0';
 
    return masiv;
}
main(){
    char *a,*b,*c;
    a = abc(1);
    b = abc(2);
    c = abc(3);
    std::cout<<a<<std::endl;
    std::cout<<b<<std::endl;
    std::cout<<c<<std::endl;
}
программа 3 раза выведет число 3, я понимаю, что это из-за того, что a,b,c просто ссылаются на одну ячейку памяти, но как правильно присвоить и сохранить значения я не знаю.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Крюгер
 Аватар для Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 409
Записей в блоге: 3
22.09.2013, 22:24     Как присвоить значение возвращаемое функцией? #2
ты не поверишь. функция массив не выведет просто так...
да и скажи ты толком что сделать хочешь, я не телепат же
--------------------------------------------------------------
и опять же, массив статический в функциях тем более никто не делает,
это не рационально, вдруг ты захочешь массив большей длины обработать? а исходники например посеял,
или откомпилить нечем?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
22.09.2013, 22:28     Как присвоить значение возвращаемое функцией? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
char* abc(int num){
    static char masiv[2] = {0};
    masiv[0] = num+'0';
 
    return masiv;
}
int main(){
    char a[2], b[2], c[2];
    strcpy(a, abc(1));
    strcpy(b, abc(2));
    strcpy(c, abc(3));
    std::cout<<a<<std::endl;
    std::cout<<b<<std::endl;
    std::cout<<c<<std::endl;
}
Крюгер
 Аватар для Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 409
Записей в блоге: 3
22.09.2013, 22:33     Как присвоить значение возвращаемое функцией? #4
gooseim, смысл так делать? все потроха снаружи... а функция получается для красоты
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
22.09.2013, 22:34     Как присвоить значение возвращаемое функцией? #5
Крюгер, я не говорил, что есть смысл. Я просто привел работающий пример.
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:34  [ТС]     Как присвоить значение возвращаемое функцией? #6
Крюгер,
этот пример просто шаблон, в функции я использую рекурсию ля этого мне нужен статически массив куда я запиливаю по символу каждую итерацию. Вот хотелось бы узнать как функцией вернуть массив, чтоб он имел тип char,а не указатель char*

gooseim,
Спасибо, хотелось бы узнать есть ли какой то способ сделать это без функций, просто я не думаю что в c++ для решения таких простых задач не предусмотрен какой то обычный стандатрный способ )
Крюгер
 Аватар для Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 409
Записей в блоге: 3
22.09.2013, 22:39     Как присвоить значение возвращаемое функцией? #7
gooseim, рабочий говоришь?https://docs.google.com/drawings/d/1...ub?w=960&h=720
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
22.09.2013, 22:44     Как присвоить значение возвращаемое функцией? #8
Крюгер, это смотря каким компилятором тестить. Codepad съедает такое.
NanoChely
, если честно я вообще не понял какая стоит задача.

Добавлено через 3 минуты
Крюгер, специально для тебя:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstring>
 
char* abc(int num){
    static char masiv[2] = {0};
    masiv[0] = num+'0';
 
    return masiv;
}
int main(){
    char a[2], b[2], c[2];
    std::strcpy(a, abc(1));
    std::strcpy(b, abc(2));
    std::strcpy(c, abc(3));
    std::cout<<a<<std::endl;
    std::cout<<b<<std::endl;
    std::cout<<c<<std::endl;
}
Это должны все съесть.
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:47  [ТС]     Как присвоить значение возвращаемое функцией? #9
gooseim, твой пример помог и делает то что надо. Я хотел бы узнать, вот в c++ чтоб вернуть массив символов из функции в прототипе функции нужно обязательно ставить звездочку, то есть char*. Я не понимаю для чего? Может ли в C++ функция вернуть char массив, а не char* ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 22:48     Как присвоить значение возвращаемое функцией? #10
может тогда стоит возвращать std::string?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
22.09.2013, 22:48     Как присвоить значение возвращаемое функцией? #11
NanoChely, массив в c++ возвращать нельзя. Можно вернуть std::string например.
Крюгер
 Аватар для Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 409
Записей в блоге: 3
22.09.2013, 22:48     Как присвоить значение возвращаемое функцией? #12
gooseim, теперь работает...но опять же ты return забыл
(у меня без него не есть компиль)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 22:49     Как присвоить значение возвращаемое функцией? #13
Цитата Сообщение от Крюгер Посмотреть сообщение
но опять же ты return забыл
где?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
22.09.2013, 22:50     Как присвоить значение возвращаемое функцией? #14
Крюгер, return в main писать не обязательно. Согласно вроде предыдущему стандарту если память не изменяет. В этом ничего не изменилось.
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:53  [ТС]     Как присвоить значение возвращаемое функцией? #15
gooseim, ага, то есть только указатель на какой то элемент массива можно вернуть да?

Добавлено через 53 секунды
Croessmah, мне не решение задачи нужно, а понять суть, как тут все устроено в c++ )
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 22:55     Как присвоить значение возвращаемое функцией? #16
Цитата Сообщение от NanoChely Посмотреть сообщение
Может ли в C++ функция вернуть char массив, а не char* ?
Передача/возврат массива - это всегда операции с указателем на начало массива (массив не передаётсся и не возвращается по значению).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 23:00     Как присвоить значение возвращаемое функцией?
Еще ссылки по теме:

Шаблонная Функция: возвращаемое значение должно быть такого же типа, как входящее C++
C++ Значение, возвращаемое функцией (C++)
Непонятно выражение "значение, возвращаемое функцией" C++

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

Или воспользуйтесь поиском по форуму:
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 23:00  [ТС]     Как присвоить значение возвращаемое функцией? #17
alsav22, да, я это теперь понял. привычка с других языков )
Yandex
Объявления
22.09.2013, 23:00     Как присвоить значение возвращаемое функцией?
Ответ Создать тему
Опции темы

Текущее время: 19:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru