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

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

Войти
Регистрация
Восстановить пароль
 
 
NanoChely
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
#1

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

22.09.2013, 22:09. Просмотров 591. Ответов 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++):

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

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

Указатель на функцию, укзатель на воид и возвращаемое функцией значение - C++
Есть функции, идентичные по функционалу, но возвращающие значения разных типов(сами значения не важны). double a() { cout &lt;&lt; 123...

Множество возвращаемое функцией как результат - C++
Помогите пожалуйста с возвратом множества, как результата работы функции. int Cross(){ set&lt;int&gt; b; ...

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

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

16
Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 423
Записей в блоге: 7
22.09.2013, 22:24 #2
ты не поверишь. функция массив не выведет просто так...
да и скажи ты толком что сделать хочешь, я не телепат же
--------------------------------------------------------------
и опять же, массив статический в функциях тем более никто не делает,
это не рационально, вдруг ты захочешь массив большей длины обработать? а исходники например посеял,
или откомпилить нечем?
1
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 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
Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 423
Записей в блоге: 7
22.09.2013, 22:33 #4
gooseim, смысл так делать? все потроха снаружи... а функция получается для красоты
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 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
Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 423
Записей в блоге: 7
22.09.2013, 22:39 #7
gooseim, рабочий говоришь?https://docs.google.com/drawings/d/1...ub?w=960&h=720
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 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
Эксперт CЭксперт С++
13514 / 7673 / 867
Регистрация: 27.09.2012
Сообщений: 18,896
Записей в блоге: 3
Завершенные тесты: 1
22.09.2013, 22:48 #10
может тогда стоит возвращать std::string?
1
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
22.09.2013, 22:48 #11
NanoChely, массив в c++ возвращать нельзя. Можно вернуть std::string например.
1
Крюгер
0 / 60 / 3
Регистрация: 16.11.2012
Сообщений: 423
Записей в блоге: 7
22.09.2013, 22:48 #12
gooseim, теперь работает...но опять же ты return забыл
(у меня без него не есть компиль)
0
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 867
Регистрация: 27.09.2012
Сообщений: 18,896
Записей в блоге: 3
Завершенные тесты: 1
22.09.2013, 22:49 #13
Цитата Сообщение от Крюгер Посмотреть сообщение
но опять же ты return забыл
где?
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 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
22.09.2013, 22:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 22:53
Привет! Вот еще темы с ответами:

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

Шаблонная Функция: возвращаемое значение должно быть такого же типа, как входящее - C++
Добрый день всем. Помогите разобраться в шаблонах. template&lt;typename X&gt; double mean(const X *x,int n) { int s = 0; int i; ...

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

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


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

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

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