Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2011, 16:37   #1
veter48
Форумчанин
 
Регистрация: 26.07.2010
Сообщений: 150
По умолчанию Си. Передача по значению.

Код:
void changePositive(int mas[], int j)
{
   int left = 0;
   int right = j;
   int flag;
        
   while (left < right)
  {
        if(mas[left]>0)
        {
            flag = 1;
            while(flag == 1)
            {
                 if (mas[right]>0)
                 {
                       int temp;
                       temp = mas[left];
                       mas[left] = mas[right];
                       mas[right] = temp; 
                       flag = 0;
                 }
                 right -= 1;   
            }
        }
        left += 1;
  }
  print(mas);
}
Почему когда я передаю в эту функцию массив, меняется не только внутренний массив mas[], а также переданный из метода main() в эту функцию массив m[]. Вот вызов:

Код:
changePositive(m,N-1);
Спасибо.
veter48 вне форума Ответить с цитированием
Старый 08.10.2011, 19:03   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А сам массив у тебя как объявлен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2011, 19:27   #3
STASOPOLUS
 
Регистрация: 13.09.2009
Сообщений: 6
По умолчанию

где там передача по значению-то? m - это указатель на начало массива, стало быть имеем передачу по адресу. ну это если я ничего не путаю конечно же ))
STASOPOLUS вне форума Ответить с цитированием
Старый 08.10.2011, 21:47   #4
veter48
Форумчанин
 
Регистрация: 26.07.2010
Сообщений: 150
По умолчанию

Цитата:
А сам массив у тебя как объявлен?
Код:
int m[N-1];
Цитата:
где там передача по значению-то? m - это указатель на начало массива, стало быть имеем передачу по адресу. ну это если я ничего не путаю конечно же ))
Разве? Мне кажется указатель на начало массива был бы с символом &, а в функции с символом *. Ну если вы правы, как тогда передать по значению.
veter48 вне форума Ответить с цитированием
Старый 08.10.2011, 22:01   #5
STASOPOLUS
 
Регистрация: 13.09.2009
Сообщений: 6
По умолчанию

можешь убедиться в этом написав что-то вроде
cout << m;
увидишь, что программа выведет адрес.

насколько мне известно нет никакой передачи массива по значению. можно в самой функции локально создать новый массив и проинициализировать его значениями старого, и дальше уже работать именно с новым массивом.
STASOPOLUS вне форума Ответить с цитированием
Старый 08.10.2011, 23:35   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Ну если вы правы, как тогда передать по значению.
Читаем Страуструпа, где написано что массив никогда не передаётся по значению! ибо имя массива это указатель
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка по наибольшему значению Irek11 Microsoft Office Excel 4 14.08.2011 17:58
Итератор списка по значению Link0 Общие вопросы по Java, Java SE, Kotlin 0 21.11.2010 14:02
вычисление по предыдущему значению grafgrial Общие вопросы Delphi 3 23.04.2010 15:45
Поиск по значению OgE®_M@G Microsoft Office Excel 3 23.02.2010 06:33
Фильтрование БД по значению поля ИВАНьКа Общие вопросы C/C++ 7 23.08.2009 10:09