Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
reserr
0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 21
1

Передать в функцию массив без указания его размера

24.06.2016, 10:32. Просмотров 1657. Ответов 12
Метки нет (Все метки)

Вопрос .
какой массив мы можем передавать в функцию без указания элемента ?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2016, 10:32
Ответы с готовыми решениями:

Динамический массив без явного указания размера
Самый праздный вопрос, наверное. И, вроде бы, я даже знаю ответ, но все-таки сомневаюсь. В С++...

Можно ли передать в функцию массив произвольного размера ?
Хочу создать функцию для детекта количества элементов в массиве sizeof(array)/sizeof(array); ...

Как сделать ввод матрицы из файла без указания размера
Я сделал ввод матрицы из файла с указанием ее размера(массива),а как сделать ввод матрицы из файла...

Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
Ребята, скажите пожалуйста, как реализовать такую идею? Необходимо передать в функцию двумерный...

Дан массив A размера N. Напишите функцию, которая выводит его элементы в следующем порядке:
Дан массив A размера N. Напишите функцию, которая выводит его элементы в следующем порядке:...

12
Renji
2569 / 1761 / 529
Регистрация: 05.06.2014
Сообщений: 5,117
24.06.2016, 11:02 2
Какая связь между передачей массива и указанием элемента?
0
nstwf
91 / 80 / 57
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
24.06.2016, 12:44 3
Не это имели в виду?
Цитата Сообщение от reserr Посмотреть сообщение
какой массив мы можем передавать в функцию без указания количества элементов ?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7991 / 3881 / 536
Регистрация: 04.12.2011
Сообщений: 11,336
Записей в блоге: 9
24.06.2016, 12:53 4
Цитата Сообщение от reserr Посмотреть сообщение
какой массив мы можем передавать в функцию без указания элемента ?
Любой.
0
24.06.2016, 12:53
AlexVRud
586 / 217 / 81
Регистрация: 04.07.2014
Сообщений: 617
24.06.2016, 12:58 5
std::vector
0
Croessmah
++Ͻ
16050 / 9149 / 1758
Регистрация: 27.09.2012
Сообщений: 22,513
Записей в блоге: 2
Завершенные тесты: 2
24.06.2016, 12:58 6
Лучший ответ Сообщение было отмечено HighPredator как решение

Решение

Цитата Сообщение от IGPIGP Посмотреть сообщение
Любой.
Ни какой, в случае попытки "передачи по значению",
тип массива будет ослаблен до указателя.
Можно передать, например, ссылку на массив,
но там нужно всё равно указывать кол-во элементов.
В случае с шаблоном, вывод размера может быть автоматическим.
2
lawr
377 / 271 / 478
Регистрация: 09.05.2014
Сообщений: 769
24.06.2016, 15:14 7
Лучший ответ Сообщение было отмечено reserr как решение

Решение

одномерный.
C++
1
void func (int A[]){};
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7991 / 3881 / 536
Регистрация: 04.12.2011
Сообщений: 11,336
Записей в блоге: 9
24.06.2016, 18:19 8
Цитата Сообщение от Croessmah Посмотреть сообщение
в случае попытки "передачи по значению",
Что тут имеется ввиду? Массивы передаются только по ссылке.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
#define len 5
void foo_takes_array(int(&arr)[len])//вот передача массива (по ссылке)
//иначе массивы не передаются
//можно конечно передать указатель и размер, но так можно передать
//всё что угодно
{
for(int i=0; i<len; ++i)cout<<arr[i]<<" ";
}
 
int main(int argc, char* argv[])
{
int arr[]={1,2,3,4,5};
foo_takes_array(arr);//тут размер указывать не нужно и элемент тоже
cout<<endl;
system("pause");
return 0;
}
0
Croessmah
++Ͻ
16050 / 9149 / 1758
Регистрация: 27.09.2012
Сообщений: 22,513
Записей в блоге: 2
Завершенные тесты: 2
24.06.2016, 19:22 9
Цитата Сообщение от IGPIGP Посмотреть сообщение
Что тут имеется ввиду?
Написал в кавычках специально.
C++
1
2
void bar(int arr[]);//указатель
void foo(int arr[100]);//указатель
Добавлено через 2 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
//иначе массивы не передаются
Можно, например, указатель на массив передать.
Прошу любить и жаловать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
#define len 5
void foo_takes_array(int(*arr)[len])
{
    for(int i=0; i<len; ++i) cout<<(*arr)[i]<<" ";
}
 
int main(int argc, char* argv[])
{
    int arr[]={1,2,3,4,5};
    foo_takes_array(&arr);//тут размер указывать не нужно и элемент тоже
    cout<<endl;
}
http://rextester.com/VFTX41988

с многомерными, ЕМНИП, не прокатит
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7991 / 3881 / 536
Регистрация: 04.12.2011
Сообщений: 11,336
Записей в блоге: 9
24.06.2016, 22:41 10
Цитата Сообщение от Croessmah Посмотреть сообщение
Прошу любить и жаловать:
Можно. Можно и ссылку на указатель на массив передать. Но это как раз случай передачи когда размер не имеет значения. Поэтому что это указатель на массив в отличии от указателей на элемент. Это как раз тот случай когда:
Цитата Сообщение от IGPIGP Посмотреть сообщение
Любой.
0
Байт
Эксперт C
22280 / 14033 / 2965
Регистрация: 24.12.2010
Сообщений: 29,916
24.06.2016, 23:12 11
Неужели ЕГЭ ?
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7991 / 3881 / 536
Регистрация: 04.12.2011
Сообщений: 11,336
Записей в блоге: 9
24.06.2016, 23:50 12
Цитата Сообщение от Байт Посмотреть сообщение
Неужели ЕГЭ ?
Не то слово. Массив иначе чем по ссылке не передать. Указатель на массив тоже можно. Но не массив же это. Ссылка это имя массива. И передается переменная массива её именем. А указатель передаётся как указатель. Это занудство конечно, но вопрос таков.
Смотрите:

Цитата Сообщение от reserr Посмотреть сообщение
какой массив мы можем передавать в функцию без указания элемента
О каком элементе речь? Человек экономит буквы? Я считаю ответ:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Любой.
Наиболее лаконичным. Пять букв.
0
Ferrari F1
795 / 525 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
25.06.2016, 00:01 13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
void function(int* begin, const int* end)
{
    while (begin != end)
    {
        ++begin;
    }
}
 
int main()
{
    int mass[]
    {
        1, 2, 3, 4, 5, 6
    };
    function(begin(mass), end(mass));
    system("pause");
    return 0;
}
0
25.06.2016, 00:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2016, 00:01

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

Многомерный символьный(строковый) массив без явного указания разрядности
В общем нужно прям в коде создать массив, к примеру: char Mmas=&quot;Первая строка. Вторая строка....

создать массив из дробей и передать его в функцию, которая изменит каждый чётный элемент путём добавления следующего за этой дробью
Надо создать массив из дробей и передать его в функцию, которая изменит каждый чётный элемент путём...


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

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

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