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

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

Войти
Регистрация
Восстановить пароль
 
 
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
#1

Передача всего массива в функцию - C++

21.08.2013, 15:05. Просмотров 801. Ответов 28
Метки нет (Все метки)

Начал изучать алгоритмы сортировки и поиска, решил сделать программу для тестирования работы сортировки и поиска на производительность, по времени (по нагрузке на ЦП и ОП пока что мозгов не хватает).
И возникла проблема, вот я из своей программы выделил новую программу, убрав весь лишний код, оставил только то, где происходит косяк:

Кликните здесь для просмотра всего текста
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream> 
using std::cin;
using std::cout;
using std::endl;
 
#include <time.h>
 
#include <windows.h>
 
const int dlina = 1000;
 
 
void One(const int *);
void Two(int *);
 
int main()
{
setlocale(LC_ALL,"");
 
int test[dlina];
 
for (int i = 0; i < dlina; i++ ) 
{ test[i] = (1 + rand() % 1000); } 
 
One(test);
 
system("pause");
return 0;
}
 
 
void One(const int *test1)
{
int temp[dlina];
*temp = *test1;
 
Two(temp);
}
 
 
void Two(int *test2)
{
for (int i = 0; i < dlina; i++ ) 
{ cout << test2[i] << " "; } 
cout << endl;
}


Я знаю что косяк происходит в строчке 37, что в Two передается что то не то, подскажите как сделать что бы передавалось нормально и подскажите почему возникает такой косяк, все в принципе сделано по аналогии с One, если взять код из строчек 43-45 и перенести в функцию One, а Two удалить, то все будет работать.


И еще вопрос, как я понял я в void One передаю ссылку на массив, т.е. если я в void One изменю полученный массив (test1) то у меня изменится и массив test из main, а если мне нужно что бы он не по ссылке передавался, а копировался, как быть?

PS то, что я передаю не по ссылке, а передаю указатель в котором хранится адрес на массив test из main, я в курсе, для простоты я написал что передаю по ссылке.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2013, 15:05     Передача всего массива в функцию
Посмотрите здесь:

Передача массива в функцию - C++
Добрый день! Начал изучать C++ и столкнулся вот с какой проблемой. Я передаю массив в некоторую функцию. В конечном итоге передаваемый...

Передача массива в функцию - C++
Кто может объяснить как передать элемент структуры в функцию? допустим, я объявил структуру: struct one{ int nom; int mass; ...

Передача в функцию массива - C++
Всем привет. У меня следующая проблема: мне нужно передать в функцию массив так, чтоб потом при завершении работы его значения поменялись. ...

Передача массива в функцию - C++
Почему мусор выводит? bool insert(int* mas, int n, int v) { int _n = n + 1; int* mas2 = new int; for (int i = 0; i &lt; n; ++i) ...

Передача массива в функцию. - C++
Подскажите пожалуйста! Нужно считать текстовый файл в массив и найти в нем какой-нибудь символ; вернуть номер элемента в массиве. Поиск...

Передача массива в функцию - C++
Какие есть способы для передачи массивы в функцию. И как передать массив с указателем на него чтобы все изменения вносились в него? Если...

Передача массива в функцию - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;time.h&gt; using namespace std; void maxx(); int main(int argc, char *argv) ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
21.08.2013, 15:14     Передача всего массива в функцию #2
Цитата Сообщение от VLK Посмотреть сообщение
C++
1
*temp = *test1;
Ты в курсе, что тут присвоение только первому элементу массива?
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 15:17  [ТС]     Передача всего массива в функцию #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Ты в курсе, что тут присвоение только первому элементу массива?
Теперь да. т.е. передавал я все нормально, косяк в присвоении, а как присвоить весь массив, всему массиву, очень желательно без циклов, если это конечно возможно.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.08.2013, 15:20     Передача всего массива в функцию #4
Цитата Сообщение от VLK Посмотреть сообщение
а если мне нужно что бы он не по ссылке передавался, а копировался, как быть?
Зачем это нужно?
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
21.08.2013, 15:22     Передача всего массива в функцию #5
Цитата Сообщение от VLK Посмотреть сообщение
как присвоить весь массив, всему массиву, очень желательно без циклов, если это конечно возможно.
С обычными массивами - невозможно, используй std::array.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
21.08.2013, 15:22     Передача всего массива в функцию #6
Цитата Сообщение от VLK Посмотреть сообщение
const int dlina = 1000;
от глобальных переменных надо отказываться. эффективнее передавать указатели на начало и конец последовательности - begin и end
C++
1
2
3
4
5
6
7
8
9
void Two(int *const begin, int * const end)
{
   int* iter = begin;
   while(iter != end)
   {
      std::cout << *iter;
      iter++;
   }
}
где как и в алгоритмах передавать begin - указатель на первый элемент, end указатель за последним элементом, а вообще передавать можно любые интервалы
S_O_A_D
1 / 1 / 0
Регистрация: 04.06.2013
Сообщений: 48
21.08.2013, 15:23     Передача всего массива в функцию #7
Цитата Сообщение от VLK Посмотреть сообщение
а если мне нужно что бы он не по ссылке передавался, а копировался, как быть?
Ну тогда используйте
C++
1
std::vector
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 15:27  [ТС]     Передача всего массива в функцию #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Зачем это нужно?
по аналогии с обычными переменными, там же для чего то это надо. Вообще интересуюсь на всякий случай, был удивлен, когда обнаружил что массив не копируется а передается в виде ссылки.

Цитата Сообщение от gray_fox Посмотреть сообщение
С обычными массивами - невозможно, используй std::array.
т.е. или
C++
1
2
for (int i=0; i < dlina; i++)
{ temp[i] = test1[i] }
или std::array? (хотя я пока не знаю что это)

Цитата Сообщение от S_O_A_D Посмотреть сообщение
Ну тогда используйте
C++
1
std::vector
пока что для простоты тестирование использую обыкновенный массив, мне с ним легче работать.
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
21.08.2013, 15:30     Передача всего массива в функцию #9
Цитата Сообщение от VLK Посмотреть сообщение
т.е. или
for (int i=0; i < dlina; i++)
{ temp[i] = test1[i] }
или std::array? (хотя я пока не знаю что это)
Да, либо копировать поэлементно (ручками цикл писать или std::memcpy\std::copy), либо использовать контейнер (std::array (замена массивам по сути), std::vector и т.д.).
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 15:36  [ТС]     Передача всего массива в функцию #10
Цитата Сообщение от Кудаив Посмотреть сообщение
от глобальных переменных надо отказываться.
да я пытался устроить круговорот локальной константной переменной по функция, но что то не очень

Передача всего массива в функцию

при наведении на подчеркнутое пишет, что const int dlina должно иметь константное значение, юмор прямо.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.08.2013, 15:40     Передача всего массива в функцию #11
Цитата Сообщение от VLK Посмотреть сообщение
при наведении на подчеркнутое пишет, что const int dlina должно иметь константное значение, юмор прямо
константное значение можно получить из константного выражения, то чно можно посчитать на этапе компиляции, const ни разу этого не делает, а лишь уберегает от изменения
C++
1
2
3
4
int a;
std::cin >> a;
const int b = a;
b = 5; //error
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 15:44  [ТС]     Передача всего массива в функцию #12
А что насчет передачи всего массива не по ссылке (указателю), а что бы в функции сделали копию всего массива? такое не возможно?
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
21.08.2013, 15:44     Передача всего массива в функцию #13
Цитата Сообщение от VLK Посмотреть сообщение
юмор прямо.
создавай temp динамически
Jupiter
21.08.2013, 15:48
  #14

Не по теме:

Цитата Сообщение от VLK Посмотреть сообщение
А что насчет передачи всего массива не по ссылке (указателю), а что бы в функции сделали копию всего массива? такое не возможно?
ответ уже дал gray_fox

VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 15:49  [ТС]     Передача всего массива в функцию #15
И еще вопрос, немного относящийся к теме, сортировка, я могу не парится в поисках оптимальных вариантов т.к. как я понимаю они все описаны тут - Алгоритмы сортировок ? а что бы придумать что то новое (стоящее) надо быть программистом с 30 летним стажем + профессором высшей математики ?

Или в каждом конкретном случае свое, по этому стоит писать свои тестировать их ну и т.д.?
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 2
21.08.2013, 15:51     Передача всего массива в функцию #16
Цитата Сообщение от VLK Посмотреть сообщение
надо быть программистом с 30 летним стажем + профессором высшей математики
надо лишь рационально мыслить
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.08.2013, 15:53     Передача всего массива в функцию #17
Цитата Сообщение от VLK Посмотреть сообщение
я могу не парится в поисках оптимальных вариантов т.к. как я понимаю они все описаны тут - Алгоритмы сортировок ?
не все

Цитата Сообщение от VLK Посмотреть сообщение
по этому стоит писать свои тестировать их ну и т.д.?
в учебных целях стоит писать свои
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
21.08.2013, 15:55  [ТС]     Передача всего массива в функцию #18
Цитата Сообщение от Кудаив Посмотреть сообщение
надо лишь рационально мыслить
ну скажем так, конечно когда то я это знал, но потом забыл и вспомнил что делить на 0 нельзя, только когда решил написать такую программу Возведение в степень, отрицательные числа

так стоит мне напрягаться с сортировкой или когда она мне понадобится, все что мне нужно, это заглянуть в эту тему - Алгоритмы сортировок ?

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
в учебных целях стоит писать свои
ну я переписал из книги пару вариантов но с пониманием дела, во все вник, надеюсь этого будет достаточно?


а точнее не вспомнил что на 0 делить нельзя, а это вычитал в книжке! если бы этого не было в книжке, была бы очередная тема на форуме с название, "почему не работает?!"
salam
160 / 141 / 12
Регистрация: 10.07.2012
Сообщений: 720
21.08.2013, 16:35     Передача всего массива в функцию #19
Цитата Сообщение от VLK Посмотреть сообщение
И еще вопрос, немного относящийся к теме, сортировка, я могу не парится в поисках оптимальных вариантов т.к. как я понимаю они все описаны тут - Алгоритмы сортировок ? а что бы придумать что то новое (стоящее) надо быть программистом с 30 летним стажем + профессором высшей математики ?
надо очень хорошо разбираться в вопросе. надо понимать, какая асимптотика у какой сортировки; надо уметь по входным данным понимать, какой алгоритм быстрее; надо понимать, что к нему приписать, чтобы быстрее вышло. в общем везде принцип один нужно детально понимать все, что происходит, нужно уметь внести положительные изменения.

Добавлено через 1 минуту
Цитата Сообщение от VLK Посмотреть сообщение
const int dlina = 1000;
никогда не пишите так. это очень сильно портит впечатление о вас и вашем коде.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2013, 16:48     Передача всего массива в функцию
Еще ссылки по теме:

Передача массива в функцию - C++
Как записать данные в массив, который в функции и после вызова функции получить эти данные. По типу как с переменными void...

Передача массива в функцию - C++
Не знаю в чем проблема, почему-то в функции act()(это моя функция), итерации выполняются по два раза. Суть задания создать обратную...

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

передача массива в функцию - C++
у меня в мейне есть двумерный массив нужно его передать в дургую функцию как это сделать подскажите плиз

Передача массива в функцию - C++
Ребят, такая проблема закралась. По воле курсовика требуется запрогать алгоритм нахождения минимального многочлена рекуррентной...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.08.2013, 16:48     Передача всего массива в функцию #20
Цитата Сообщение от salam Посмотреть сообщение
никогда не пишите так
Это насчёт названия переменной?
Yandex
Объявления
21.08.2013, 16:48     Передача всего массива в функцию
Ответ Создать тему
Опции темы

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