Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
1915 / 1065 / 384
Регистрация: 06.12.2008
Сообщений: 2,802
1

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

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

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


Оба они не подходят, мож подскажет кто, что знает?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2009, 21:18
Ответы с готовыми решениями:

Как объявить и использовать функцию с аргументом и возвращаемым значением в виде массивов структур?
Всем здравствуйте. Как объявить и использовать функцию с аргументом и возвращаемым значением в...

Как на фасме объявить прототип пользовательской функции
Сам я работаю на Масме для одной темы изучаю пример на Фасме в определённых частях кода мне...

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

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

19
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
19.01.2009, 00:32 2
Цитата Сообщение от Snoopy Посмотреть сообщение
char *f1(char *str1, char *str2);
а этот чем плох??
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.01.2009, 01:17 3
массив передать нельзя, можно лишь передать адрес его самого первого элемента (нулевого), поэтому и в функцию и из функции возвращается просто указатель (а в нём уже хранится адрес этого нулевого элемента)
чтобы вернуть из функции символьный массив нужно либо записать его в статическую область памяти, а потом вернуть адрес его первого элемента, либо создать его в динамической памяти но потом её обязательно нужно освобождать, иначе прога будет занимать всё больше и больше памяти по мере роста
0
4 / 4 / 0
Регистрация: 18.01.2009
Сообщений: 21
19.01.2009, 16:30 4
Цитата Сообщение от accept Посмотреть сообщение
массив передать нельзя, можно лишь передать адрес его самого первого элемента (нулевого), поэтому и в функцию и из функции возвращается просто указатель (а в нём уже хранится адрес этого нулевого элемента)
чтобы вернуть из функции символьный массив нужно либо записать его в статическую область памяти, а потом вернуть адрес его первого элемента, либо создать его в динамической памяти но потом её обязательно нужно освобождать, иначе прога будет занимать всё больше и больше памяти по мере роста
йопт.. оО по моему очень даже реально в функцию передавать массивы
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
19.01.2009, 19:02 5
Цитата Сообщение от Грин Посмотреть сообщение
моему очень даже реально в функцию передавать массивы
В функцию да, а вернуть массив.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
19.01.2009, 19:06 6
Цитата Сообщение от Грин Посмотреть сообщение
йопт.. оО по моему очень даже реально в функцию передавать массивы
Нифига. accept прав. Ни передавать, ни возвращать. Даже если ты напишешь
char a[]
в массив передастся указатель.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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;
}
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
19.01.2009, 22:20 8
accept, не, так неинтересно. Тогда можно в любую программную структуру массив записать...
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.01.2009, 22:33 9
на макросы можно перевести, получится как бы там где надо можно будет легко любой массив упаковать передать вернуть, если так не сделано изначально значит так надо, передавать массивы == создавать их копии, передавать указатель на начало массива а не весь массив просто быстрее и легче для программы
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
19.01.2009, 22:42 10
В класс можно затолкать, конструктор копирования его переписать, чтобы при передачи по значению все тип-топ было...и еще куча-куча различных способов...
Вопрос в том, что нужно тому, кто это задал.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.01.2009, 22:59 11
изменение str1 и возвращение его же как во всех строковых функциях, возвращающих строку
0
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
20.01.2009, 09:37 12
разве нельзя в функцию передавать массив по значению?!!!
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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]$
в данном случае массив передаётся в функцию, в ней создаётся копия структуры, проводится изменение копии, первоначальный массив остаётся прежним, остальные способы передают сам массив без создания локальной копии
0
1915 / 1065 / 384
Регистрация: 06.12.2008
Сообщений: 2,802
21.01.2009, 17:48  [ТС] 14
спасибо всем за дискуссию, я уже и сам нашел правильное решение!!
accept
структуры мне не нужны, нужна была всего лишь одна строчка
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
21.01.2009, 18:22 15
Snoopy, ну так давай свое решение сюда.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.01.2009, 23:16 16
структуры здесь для создания локальной копии массива, будь то строка или другой, чтобы можно было проводить изменения массива, не влияя на переданный
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
21.01.2009, 23:35 17
accept, да он понял. Он же написал, что сделал без структур. Мне интересно, через что.
0
1915 / 1065 / 384
Регистрация: 06.12.2008
Сообщений: 2,802
22.01.2009, 06:24  [ТС] 18
char *f1(char str1[],char str2[]); - вот это и все что мне нужно было.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
22.01.2009, 07:13 19
ну f1 вернёт адрес, массив то она не вернёт, а через структуры возвращается структура а в ней массив, в этом-то и фишка что он может быть видоизменённый без изменения исходного
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
22.01.2009, 11:07 20
Цитата Сообщение от Snoopy Посмотреть сообщение
char *f1(char str1[],char str2[]); - вот это и все что мне нужно было.
гы-гы-гы. Этот способ, все равно передаст указатель на первый элемент, но никак не сам массив. И вернет тоже указатель, как уже сказал accept. Вас надули
0
22.01.2009, 11:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2009, 11:07
Помогаю со студенческими работами здесь

Делегат для методов с двумя аргументами и целочисленным результатом
Добрый день. Первую задачу решила, не могу никак понять вторую и третью по реализации. Как я поняла...

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

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

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

Прототип функции для обработки массива
Вопрос по учебнику Стивена Прата. Имеется объявление массива: short clops; Напишите прототип и...

Передача массива char в прототип функции
У меня есть функция public void shift(), я хочу передать в неё с main переменную типа string....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru