Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
#1

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

22.09.2013, 22:09. Просмотров 635. Ответов 16
Метки нет (Все метки)

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 22:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как присвоить значение возвращаемое функцией? (C++):

Как присвоить возвращаемое значение функции переменной?
double sine(int index, int frequency) { return (100*sin(index*frequency));...

Значение, возвращаемое функцией (C++)
В общем, задача такая. Написать программу, печатающую все вводимые символы в...

Указатель на функцию, укзатель на воид и возвращаемое функцией значение
Есть функции, идентичные по функционалу, но возвращающие значения разных...

Множество возвращаемое функцией как результат
Помогите пожалуйста с возвратом множества, как результата работы функции. ...

Непонятно выражение "значение, возвращаемое функцией"
Уважаемые господа. Мне немного непонятно выражение &quot;значение, возвращаемое...

Возвращаемое значение функции - указатель на массив. КАК это записать?
Функция заполняет массив. например (кусок проги) .... int mas; int...

16
Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 434
Записей в блоге: 9
Завершенные тесты: 1
22.09.2013, 22:24 #2
ты не поверишь. функция массив не выведет просто так...
да и скажи ты толком что сделать хочешь, я не телепат же
--------------------------------------------------------------
и опять же, массив статический в функциях тем более никто не делает,
это не рационально, вдруг ты захочешь массив большей длины обработать? а исходники например посеял,
или откомпилить нечем?
1
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
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;
}
1
Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 434
Записей в блоге: 9
Завершенные тесты: 1
22.09.2013, 22:33 #4
gooseim, смысл так делать? все потроха снаружи... а функция получается для красоты
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
22.09.2013, 22:34 #5
Крюгер, я не говорил, что есть смысл. Я просто привел работающий пример.
0
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:34  [ТС] #6
Крюгер,
этот пример просто шаблон, в функции я использую рекурсию ля этого мне нужен статически массив куда я запиливаю по символу каждую итерацию. Вот хотелось бы узнать как функцией вернуть массив, чтоб он имел тип char,а не указатель char*

gooseim,
Спасибо, хотелось бы узнать есть ли какой то способ сделать это без функций, просто я не думаю что в c++ для решения таких простых задач не предусмотрен какой то обычный стандатрный способ )
0
Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 434
Записей в блоге: 9
Завершенные тесты: 1
22.09.2013, 22:39 #7
gooseim, рабочий говоришь?https://docs.google.com/drawings/d/1...ub?w=960&h=720
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
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;
}
Это должны все съесть.
0
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:47  [ТС] #9
gooseim, твой пример помог и делает то что надо. Я хотел бы узнать, вот в c++ чтоб вернуть массив символов из функции в прототипе функции нужно обязательно ставить звездочку, то есть char*. Я не понимаю для чего? Может ли в C++ функция вернуть char массив, а не char* ?
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
22.09.2013, 22:48 #10
может тогда стоит возвращать std::string?
1
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
22.09.2013, 22:48 #11
NanoChely, массив в c++ возвращать нельзя. Можно вернуть std::string например.
1
Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 434
Записей в блоге: 9
Завершенные тесты: 1
22.09.2013, 22:48 #12
gooseim, теперь работает...но опять же ты return забыл
(у меня без него не есть компиль)
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
22.09.2013, 22:49 #13
Цитата Сообщение от Крюгер Посмотреть сообщение
но опять же ты return забыл
где?
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
22.09.2013, 22:50 #14
Крюгер, return в main писать не обязательно. Согласно вроде предыдущему стандарту если память не изменяет. В этом ничего не изменилось.
0
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:53  [ТС] #15
gooseim, ага, то есть только указатель на какой то элемент массива можно вернуть да?

Добавлено через 53 секунды
Croessmah, мне не решение задачи нужно, а понять суть, как тут все устроено в c++ )
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 22:55 #16
Цитата Сообщение от NanoChely Посмотреть сообщение
Может ли в C++ функция вернуть char массив, а не char* ?
Передача/возврат массива - это всегда операции с указателем на начало массива (массив не передаётсся и не возвращается по значению).
1
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 23:00  [ТС] #17
alsav22, да, я это теперь понял. привычка с других языков )
0
22.09.2013, 23:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 23:00
Привет! Вот еще темы с решениями:

Тип void как возвращаемое значение функции: что он такое, зачем он нужен, где, когда и как его использовать?
Объясните пожалуйста про Void для оооочень далекого человека. Читаю книгу...

Шаблонная Функция: возвращаемое значение должно быть такого же типа, как входящее
Добрый день всем. Помогите разобраться в шаблонах. template&lt;typename X&gt; ...

Ключевое слово constexpr: как определить удалось ли вычислить возвращаемое значение на этапе компиляции?
https://habrahabr.ru/post/228181/ Как определить удалось ли вычислить...

Напишите конструктор для инициализации объекта класса Time, который может использовать текущее время, возвращаемое функцией time ().
Помогите пожалуйста написать программу на С++. Просто скоро курсовую сдавать, а...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

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