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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
Snoopy
1912 / 1069 / 90
Регистрация: 06.12.2008
Сообщений: 2,802
18.01.2009, 21:18     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #1
Здрасте всем), есть такая задачка: Объявить прототип функции 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++
Прототип функции C++
прототип функции C++
C++ Прототип функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
19.01.2009, 00:32     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #2
Цитата Сообщение от Snoopy Посмотреть сообщение
char *f1(char *str1, char *str2);
а этот чем плох??
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2009, 01:17     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #3
массив передать нельзя, можно лишь передать адрес его самого первого элемента (нулевого), поэтому и в функцию и из функции возвращается просто указатель (а в нём уже хранится адрес этого нулевого элемента)
чтобы вернуть из функции символьный массив нужно либо записать его в статическую область памяти, а потом вернуть адрес его первого элемента, либо создать его в динамической памяти но потом её обязательно нужно освобождать, иначе прога будет занимать всё больше и больше памяти по мере роста
Грин
4 / 4 / 0
Регистрация: 18.01.2009
Сообщений: 21
19.01.2009, 16:30     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #4
Цитата Сообщение от accept Посмотреть сообщение
массив передать нельзя, можно лишь передать адрес его самого первого элемента (нулевого), поэтому и в функцию и из функции возвращается просто указатель (а в нём уже хранится адрес этого нулевого элемента)
чтобы вернуть из функции символьный массив нужно либо записать его в статическую область памяти, а потом вернуть адрес его первого элемента, либо создать его в динамической памяти но потом её обязательно нужно освобождать, иначе прога будет занимать всё больше и больше памяти по мере роста
йопт.. оО по моему очень даже реально в функцию передавать массивы
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
19.01.2009, 19:02     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #5
Цитата Сообщение от Грин Посмотреть сообщение
моему очень даже реально в функцию передавать массивы
В функцию да, а вернуть массив.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.01.2009, 19:06     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #6
Цитата Сообщение от Грин Посмотреть сообщение
йопт.. оО по моему очень даже реально в функцию передавать массивы
Нифига. accept прав. Ни передавать, ни возвращать. Даже если ты напишешь
char a[]
в массив передастся указатель.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2009, 22:15     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #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
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.01.2009, 22:20     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #8
accept, не, так неинтересно. Тогда можно в любую программную структуру массив записать...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2009, 22:33     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #9
на макросы можно перевести, получится как бы там где надо можно будет легко любой массив упаковать передать вернуть, если так не сделано изначально значит так надо, передавать массивы == создавать их копии, передавать указатель на начало массива а не весь массив просто быстрее и легче для программы
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
19.01.2009, 22:42     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #10
В класс можно затолкать, конструктор копирования его переписать, чтобы при передачи по значению все тип-топ было...и еще куча-куча различных способов...
Вопрос в том, что нужно тому, кто это задал.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2009, 22:59     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #11
изменение str1 и возвращение его же как во всех строковых функциях, возвращающих строку
Бартимеус
 Аватар для Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
20.01.2009, 09:37     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #12
разве нельзя в функцию передавать массив по значению?!!!
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.01.2009, 11:49     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #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  [ТС]     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #14
спасибо всем за дискуссию, я уже и сам нашел правильное решение!!
accept
структуры мне не нужны, нужна была всего лишь одна строчка
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.01.2009, 18:22     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #15
Snoopy, ну так давай свое решение сюда.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.01.2009, 23:16     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #16
структуры здесь для создания локальной копии массива, будь то строка или другой, чтобы можно было проводить изменения массива, не влияя на переданный
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.01.2009, 23:35     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #17
accept, да он понял. Он же написал, что сделал без структур. Мне интересно, через что.
Snoopy
1912 / 1069 / 90
Регистрация: 06.12.2008
Сообщений: 2,802
22.01.2009, 06:24  [ТС]     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #18
char *f1(char str1[],char str2[]); - вот это и все что мне нужно было.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.01.2009, 07:13     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #19
ну f1 вернёт адрес, массив то она не вернёт, а через структуры возвращается структура а в ней массив, в этом-то и фишка что он может быть видоизменённый без изменения исходного
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2009, 11:07     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива
Еще ссылки по теме:

C++ Удалить из массива A[N] вс отрицательные элементы.Удаление отрицательных элементов массива оформить в виде функции
C++ Непонятки с аргументами функции
C++ Вычислить гипотенузы используя функцию, объявить прототип
C++ Вычисление кубического корня с использованием функции с параметрами и возвращаемым значением
C++ Прототип функции

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.01.2009, 11:07     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива #20
Цитата Сообщение от Snoopy Посмотреть сообщение
char *f1(char str1[],char str2[]); - вот это и все что мне нужно было.
гы-гы-гы. Этот способ, все равно передаст указатель на первый элемент, но никак не сам массив. И вернет тоже указатель, как уже сказал accept. Вас надули
Yandex
Объявления
22.01.2009, 11:07     Объявить прототип функции f1 с 2 аргументами-строками и возвращаемым результатом в виде литерного массива
Ответ Создать тему
Опции темы

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