Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Snoopy
1912 / 1071 / 383
Регистрация: 06.12.2008
Сообщений: 2,802
1

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

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

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


Оба они не подходят, мож подскажет кто, что знает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2009, 21:18
Ответы с готовыми решениями:

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

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

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

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

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

19
ISergey
Maniac
Эксперт С++
1409 / 920 / 148
Регистрация: 02.01.2009
Сообщений: 2,749
Записей в блоге: 1
19.01.2009, 00:32 2
Цитата Сообщение от Snoopy Посмотреть сообщение
char *f1(char *str1, char *str2);
а этот чем плох??
1
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
19.01.2009, 01:17 3
массив передать нельзя, можно лишь передать адрес его самого первого элемента (нулевого), поэтому и в функцию и из функции возвращается просто указатель (а в нём уже хранится адрес этого нулевого элемента)
чтобы вернуть из функции символьный массив нужно либо записать его в статическую область памяти, а потом вернуть адрес его первого элемента, либо создать его в динамической памяти но потом её обязательно нужно освобождать, иначе прога будет занимать всё больше и больше памяти по мере роста
0
Грин
4 / 4 / 0
Регистрация: 18.01.2009
Сообщений: 21
19.01.2009, 16:30 4
Цитата Сообщение от accept Посмотреть сообщение
массив передать нельзя, можно лишь передать адрес его самого первого элемента (нулевого), поэтому и в функцию и из функции возвращается просто указатель (а в нём уже хранится адрес этого нулевого элемента)
чтобы вернуть из функции символьный массив нужно либо записать его в статическую область памяти, а потом вернуть адрес его первого элемента, либо создать его в динамической памяти но потом её обязательно нужно освобождать, иначе прога будет занимать всё больше и больше памяти по мере роста
йопт.. оО по моему очень даже реально в функцию передавать массивы
0
ISergey
Maniac
Эксперт С++
1409 / 920 / 148
Регистрация: 02.01.2009
Сообщений: 2,749
Записей в блоге: 1
19.01.2009, 19:02 5
Цитата Сообщение от Грин Посмотреть сообщение
моему очень даже реально в функцию передавать массивы
В функцию да, а вернуть массив.
0
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
19.01.2009, 19:06 6
Цитата Сообщение от Грин Посмотреть сообщение
йопт.. оО по моему очень даже реально в функцию передавать массивы
Нифига. accept прав. Ни передавать, ни возвращать. Даже если ты напишешь
char a[]
в массив передастся указатель.
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
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
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
19.01.2009, 22:20 8
accept, не, так неинтересно. Тогда можно в любую программную структуру массив записать...
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
19.01.2009, 22:33 9
на макросы можно перевести, получится как бы там где надо можно будет легко любой массив упаковать передать вернуть, если так не сделано изначально значит так надо, передавать массивы == создавать их копии, передавать указатель на начало массива а не весь массив просто быстрее и легче для программы
0
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
19.01.2009, 22:42 10
В класс можно затолкать, конструктор копирования его переписать, чтобы при передачи по значению все тип-топ было...и еще куча-куча различных способов...
Вопрос в том, что нужно тому, кто это задал.
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
19.01.2009, 22:59 11
изменение str1 и возвращение его же как во всех строковых функциях, возвращающих строку
0
Бартимеус
181 / 33 / 7
Регистрация: 29.10.2008
Сообщений: 283
20.01.2009, 09:37 12
разве нельзя в функцию передавать массив по значению?!!!
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
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
Snoopy
1912 / 1071 / 383
Регистрация: 06.12.2008
Сообщений: 2,802
21.01.2009, 17:48  [ТС] 14
спасибо всем за дискуссию, я уже и сам нашел правильное решение!!
accept
структуры мне не нужны, нужна была всего лишь одна строчка
0
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
21.01.2009, 18:22 15
Snoopy, ну так давай свое решение сюда.
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
21.01.2009, 23:16 16
структуры здесь для создания локальной копии массива, будь то строка или другой, чтобы можно было проводить изменения массива, не влияя на переданный
0
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
21.01.2009, 23:35 17
accept, да он понял. Он же написал, что сделал без структур. Мне интересно, через что.
0
Snoopy
1912 / 1071 / 383
Регистрация: 06.12.2008
Сообщений: 2,802
22.01.2009, 06:24  [ТС] 18
char *f1(char str1[],char str2[]); - вот это и все что мне нужно было.
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
22.01.2009, 07:13 19
ну f1 вернёт адрес, массив то она не вернёт, а через структуры возвращается структура а в ней массив, в этом-то и фишка что он может быть видоизменённый без изменения исходного
0
Vourhey
Почетный модератор
6492 / 2267 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
22.01.2009, 11:07 20
Цитата Сообщение от Snoopy Посмотреть сообщение
char *f1(char str1[],char str2[]); - вот это и все что мне нужно было.
гы-гы-гы. Этот способ, все равно передаст указатель на первый элемент, но никак не сам массив. И вернет тоже указатель, как уже сказал accept. Вас надули
0
22.01.2009, 11:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2009, 11:07

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

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

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


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

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

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