Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
1

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

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

Author24 — интернет-сервис помощи студентам
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2013, 22:09
Ответы с готовыми решениями:

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

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

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

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

gooseim,
Спасибо, хотелось бы узнать есть ли какой то способ сделать это без функций, просто я не думаю что в c++ для решения таких простых задач не предусмотрен какой то обычный стандатрный способ )
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
22.09.2013, 22:39 7
gooseim, рабочий говоришь?https://docs.google.com/drawin... =960&h=720
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
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
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:47  [ТС] 9
gooseim, твой пример помог и делает то что надо. Я хотел бы узнать, вот в c++ чтоб вернуть массив символов из функции в прототипе функции нужно обязательно ставить звездочку, то есть char*. Я не понимаю для чего? Может ли в C++ функция вернуть char массив, а не char* ?
0
Неэпический
 Аватар для Croessmah
18124 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,997
Записей в блоге: 1
22.09.2013, 22:48 10
может тогда стоит возвращать std::string?
1
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
22.09.2013, 22:48 11
NanoChely, массив в c++ возвращать нельзя. Можно вернуть std::string например.
1
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
22.09.2013, 22:48 12
gooseim, теперь работает...но опять же ты return забыл
(у меня без него не есть компиль)
0
Неэпический
 Аватар для Croessmah
18124 / 10709 / 2063
Регистрация: 27.09.2012
Сообщений: 26,997
Записей в блоге: 1
22.09.2013, 22:49 13
Цитата Сообщение от Крюгер Посмотреть сообщение
но опять же ты return забыл
где?
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
22.09.2013, 22:50 14
Крюгер, return в main писать не обязательно. Согласно вроде предыдущему стандарту если память не изменяет. В этом ничего не изменилось.
0
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 22:53  [ТС] 15
gooseim, ага, то есть только указатель на какой то элемент массива можно вернуть да?

Добавлено через 53 секунды
Croessmah, мне не решение задачи нужно, а понять суть, как тут все устроено в c++ )
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 22:55 16
Цитата Сообщение от NanoChely Посмотреть сообщение
Может ли в C++ функция вернуть char массив, а не char* ?
Передача/возврат массива - это всегда операции с указателем на начало массива (массив не передаётсся и не возвращается по значению).
1
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 48
22.09.2013, 23:00  [ТС] 17
alsav22, да, я это теперь понял. привычка с других языков )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2013, 23:00
Помогаю со студенческими работами здесь

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

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

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

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

Как проанализировать значение возвращаемое функцией ShellExecute?
Всем здравствуйте. Инструкция int res = ShellExecute(0, L&quot;open&quot;, path.c_str(), NULL, 0, SW_SHOWNORMAL); вызывает ошибку на...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru