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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
Snoopy
1912 / 1069 / 90
Регистрация: 06.12.2008
Сообщений: 2,802
#1

Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива - C++

18.01.2009, 21:18. Просмотров 1842. Ответов 19
Метки нет (Все метки)

Здрасте всем), есть такая задачка: Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива.
Вот мои варианты: char *f1(char *str1, char *str2);
char (*f1(char *str1, char *str2))[];


Оба они не подходят, мож подскажет кто, что знает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2009, 21:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива (C++):

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

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

Список методов произвольного класса, с параметрами и возвращаемым результатом на основании делегата - C#
Привет всем! Я уже писал о подобном классе ReflectedFunctionsCore здесь, но у меня возникло желание его существенно упростить и...

Трудности с полученным результатом в виде функции х(у) - Дифференциальные уравнения
Здравствуйте. Решаю уравнение у = уу'+m. После умножения частей уравнения на \frac{dx}{dy} получается решение в виде функции х(у) вида ...

Прототип с символьным указателем (объявить) - C (СИ)
Объявить прототип функции m с 3 аргументами (первые два из них являются литерными указателями, третий - символьным) int m (char *,...

Как сделать чтобы результатом функции были три массива? - Turbo Pascal
Помогите пожалуйста. Я пишу программу по разряженным матрицам, особо вникать не надо, просто скажите пожалуйста почему выдает ошибку....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
19.01.2009, 00:32 #2
Цитата Сообщение от Snoopy Посмотреть сообщение
char *f1(char *str1, char *str2);
а этот чем плох??
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2009, 01:17 #3
массив передать нельзя, можно лишь передать адрес его самого первого элемента (нулевого), поэтому и в функцию и из функции возвращается просто указатель (а в нём уже хранится адрес этого нулевого элемента)
чтобы вернуть из функции символьный массив нужно либо записать его в статическую область памяти, а потом вернуть адрес его первого элемента, либо создать его в динамической памяти но потом её обязательно нужно освобождать, иначе прога будет занимать всё больше и больше памяти по мере роста
Грин
4 / 4 / 0
Регистрация: 18.01.2009
Сообщений: 21
19.01.2009, 16:30 #4
Цитата Сообщение от accept Посмотреть сообщение
массив передать нельзя, можно лишь передать адрес его самого первого элемента (нулевого), поэтому и в функцию и из функции возвращается просто указатель (а в нём уже хранится адрес этого нулевого элемента)
чтобы вернуть из функции символьный массив нужно либо записать его в статическую область памяти, а потом вернуть адрес его первого элемента, либо создать его в динамической памяти но потом её обязательно нужно освобождать, иначе прога будет занимать всё больше и больше памяти по мере роста
йопт.. оО по моему очень даже реально в функцию передавать массивы
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
19.01.2009, 19:02 #5
Цитата Сообщение от Грин Посмотреть сообщение
моему очень даже реально в функцию передавать массивы
В функцию да, а вернуть массив.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.01.2009, 19:06 #6
Цитата Сообщение от Грин Посмотреть сообщение
йопт.. оО по моему очень даже реально в функцию передавать массивы
Нифига. accept прав. Ни передавать, ни возвращать. Даже если ты напишешь
char a[]
в массив передастся указатель.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2009, 22:15 #7
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
 
#include <stdio.h>
 
typedef struct {
    int n[3];
} TEST;
 
void f(TEST);
 
/* передаёт массив в функцию */
main()
{
    TEST nums = { { 1, 5, 7 } };
    
    f(nums);
    
    return 0;
}
 
void f(TEST lnums)
{
    printf("%d %d %d\n",
        lnums.n[0], lnums.n[1], lnums.n[2]);
}
в функцию передаётся копия структуры, в которой массив, передача копии структуры была добавлена в ANSI C как новшество, раньше можно было тоже как с массивами только указатель передавать

Добавлено через 3 минуты 44 секунды
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
 
#include <stdio.h>
 
typedef struct {
    int n[3];
} TEST;
 
TEST f(TEST);
 
/* передаёт массив в функцию и возвращает обратно */
main()
{
    TEST nums = { { 1, 5, 7 } }, r;
    
    r = f(nums);
    printf("%d %d %d\n",
        r.n[2], r.n[1], r.n[0]);
    return 0;
}
 
TEST f(TEST lnums)
{
    return lnums;
}
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.01.2009, 22:20 #8
accept, не, так неинтересно. Тогда можно в любую программную структуру массив записать...
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2009, 22:33 #9
на макросы можно перевести, получится как бы там где надо можно будет легко любой массив упаковать передать вернуть, если так не сделано изначально значит так надо, передавать массивы == создавать их копии, передавать указатель на начало массива а не весь массив просто быстрее и легче для программы
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.01.2009, 22:42 #10
В класс можно затолкать, конструктор копирования его переписать, чтобы при передачи по значению все тип-топ было...и еще куча-куча различных способов...
Вопрос в том, что нужно тому, кто это задал.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2009, 22:59 #11
изменение str1 и возвращение его же как во всех строковых функциях, возвращающих строку
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
20.01.2009, 09:37 #12
разве нельзя в функцию передавать массив по значению?!!!
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.01.2009, 11:49 #13
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
 
#include <stdio.h>
 
typedef struct {
    int n[3];
} TEST;
 
TEST f(TEST);
 
/* передаёт массив в функцию и возвращает обратно */
main()
{
    TEST nums = { { 1, 5, 7 } }, r;
    
    r = f(nums);
    printf("%d %d %d\n",
        r.n[0], r.n[1], r.n[2]);
    printf("%d %d %d\n",
        nums.n[0], nums.n[1], nums.n[2]);
    return 0;
}
 
TEST f(TEST lnums)
{
    lnums.n[1] = 0;
    return lnums;
}
вывод
Код
[guest@station tmp]$ ./test
1 0 7
1 5 7
[guest@station tmp]$
в данном случае массив передаётся в функцию, в ней создаётся копия структуры, проводится изменение копии, первоначальный массив остаётся прежним, остальные способы передают сам массив без создания локальной копии
Snoopy
1912 / 1069 / 90
Регистрация: 06.12.2008
Сообщений: 2,802
21.01.2009, 17:48  [ТС] #14
спасибо всем за дискуссию, я уже и сам нашел правильное решение!!
accept
структуры мне не нужны, нужна была всего лишь одна строчка
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.01.2009, 18:22 #15
Snoopy, ну так давай свое решение сюда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2009, 18:22
Привет! Вот еще темы с ответами:

Шаблон функции с разным возвращаемым типом - C++
Доброго времени суток! Возникла необходимость написать шаблон функции, которая будет возвращать значение, тип которого отличен от типа...

Вычисление кубического корня с использованием функции с параметрами и возвращаемым значением - C++
Составьте программу для вычисления кубического корня из произвольного числа arg, вводимого пользователем с экрана. Вычисление...

Удалить из массива A[N] вс отрицательные элементы.Удаление отрицательных элементов массива оформить в виде функции - C++
Что исправить? #include &lt;stdio.h&gt; #define N 10 int udalenie(int A,int k ) { int i; for(i=k;i&lt;N;i++)

Нужно сделать что-то наподобие графика Ганта с результатом в виде таблицы/формы (Access) - MS Access
Всем добрый день! Прошу помочь мне, так как сама что-то никак не могу справиться. Есть форма с полями объект ...


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

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

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