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

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

Войти
Регистрация
Восстановить пароль
 
Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 151
#1

функция возвращающая аргументу его значение сама по себе - C++

22.02.2013, 16:00. Просмотров 345. Ответов 8
Метки нет (Все метки)

Глупость, но не иначе не могу объяснить это явление.

гуляя по сайтам наткнулся на пузырьковую сортировку и увидел данный код:
Кликните здесь для просмотра всего текста
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
void BubbleSort (int* a)
{
      int top = 8;
      while (top != 0)
      {
            for (int i = 0; i < top; i++)
            {
                  if (a[i] > a[i+1])
                  {
                    int temp;
                    temp = a[i];
                    a[i] = a[i+1];
                    a[i+1] = temp;
                  }
            }
            top--;
      }
}
 
int arr[9] = { 3, 7, 8, 6, 4, 1, 9, 5, 2};
BubbleSort(arr);
 
for (int i = 0; i < 9; i++)
{
    cout << arr[i] << ", ";
}


внимательно изучив его я заметил одну деталь и решил проверить и что удивительно сработало:
я тут немного изменил чтобы вы поняли суть...
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void bla(int* a)
{
     a[0]=11;
     a[1]=12;
}
 
main()
{
  int arr[2]={0,0};
  bla(arr);  
 
  cout<<arr[0]<<" "<<arr[1]; //на выходе получаем что arr[0]=11,а arr[1]=12  почему?
 
 return 0;
}



скомпилировав код можно понять, что переменные arr[0 и 1] станут 11 и 12, но только неизвестно почему?
И почему такой "метод" не работает с обычными переменными(не массивами)?


Вот кратко вопросы:

1) Почему и как это происходит?
2)Почему это работает только на массиве?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 16:00     функция возвращающая аргументу его значение сама по себе
Посмотрите здесь:

Функция, возвращающая значение - C++
сам не могу осилить

Рекурсивная функция, не возвращающая значение - C++
Разработать рекурсивную функцию для вывода на экран картинки (при натуральном число n): 1 222 33333 ... 33333 222 1 ...

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

Задача (функция возвращающая значение и массивы данных) - C++
Написать функцию, возвращающую значение, для решения следующей задачи. Найти сумму минимальных значений всех строк двумерного массива....

Функции, ошибка C2562: tabl: функция типа "void", возвращающая значение - C++
Выдает ошибку error C2562: tabl: функция типа &quot;void&quot;, возвращающая значение. #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt;...

Исправить ошибку error C2562: функция типа "void", возвращающая значение - C++
Выдает ошибку error C2562: tabl: функция типа &quot;void&quot;, возвращающая значение. #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NIch
399 / 310 / 27
Регистрация: 17.03.2010
Сообщений: 1,120
22.02.2013, 16:08     функция возвращающая аргументу его значение сама по себе #2
Наверное потому, что "а" это указатель на ячейку памяти, где расположен первый элемент массива.
Ты изменяешь память по данным адресам.
Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 151
22.02.2013, 16:14  [ТС]     функция возвращающая аргументу его значение сама по себе #3
NIch, а по подробнее можно? потому что я даже назвав все переменные словами(разными), то всеравно происходит такая фигня...
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
22.02.2013, 16:18     функция возвращающая аргументу его значение сама по себе #4
Xipxop, Можно вопрос? Для чего пытаться программировать, не попытавшись погуглить/почитать книжку (второе приоритетнее). Указатель описывается в ЛЮБОЙ книге. Имя массива - указатель на его первый элемент. Если вы передадите переменную по указателю/ссылке вы тоже сможете ее изменить.
Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 151
22.02.2013, 16:46  [ТС]     функция возвращающая аргументу его значение сама по себе #5
Тогда осталось несколько вопросов:
1) Как передать значение этой переменной другой функции, НО ЗАЩИТИВ её! (чтобы переменная arr была НЕ тронута)
2) Как сделать это, с обычной переменной?(не массив)

не работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void spawn(int *mana)
{
    *mana=9;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int bgs=0;
    spawn(bgs);
    cout << "\nc="<<bgs;
 
 
 
 
    system("pause");
    return 0;
}

так тоже не работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void spawn(int *mana)
{
    &mana=9;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int bgs=0;
    spawn(bgs);
    cout << "\nc="<<bgs;
 
 
 
 
    system("pause");
    return 0;
}
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
22.02.2013, 16:56     функция возвращающая аргументу его значение сама по себе #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void spawn(int *mana)
{
    *mana=9;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int bgs=0;
    spawn(&bgs);
    cout << "\nc="<<bgs;
 
 
 
 
    system("pause");
    return 0;
}
или

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void spawn(int& mana)
{
    mana=9;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int bgs=0;
    spawn(bgs);
    cout << "\nc="<<bgs;
 
 
 
 
    system("pause");
    return 0;
}
Передать массив защитив от изменения элементарно.

либо

C++
1
void f(int arr[]) { }
либо
C++
1
void f(const int* const* arr) {}
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
22.02.2013, 17:10     функция возвращающая аргументу его значение сама по себе #7
Цитата Сообщение от ForEveR Посмотреть сообщение
Передать массив защитив от изменения элементарно.
либо
C++
1
void f(int arr[]) { }
И как это защитит массив?

Автор, думаю, хочет изменять элементы массива в функции так, чтобы это не затронуло исходный массив. Так что const тоже вряд ли подойдет. Или копию массива создать и ее передавать, или уж тогда std::vector использовать.
Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 151
22.02.2013, 18:45  [ТС]     функция возвращающая аргументу его значение сама по себе #8
Спасибо!
Не знал бы что без вас делать, раньше ведь думал что так нельзя...

ключевые слова для поиска: указатель на массив.
Тема закрыта.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2013, 19:03     функция возвращающая аргументу его значение сама по себе
Еще ссылки по теме:

что сделать чтобы прога сама по себе открылась? - C++
что можно написать или сделать что прога сама по себе попала после загрузки в рут?или бут не помню...чтоб сама по себе открывалась и начала...

Задать аргументу значение по умолчанию - C++
Идея такова: есть у меня однонаправленный линейный список и конструктор для инициализации его значений: ListItem(string &amp;f,int y, int...

Функция, возвращающая ссылку - C++
Помогите исправить функцию, которая возвращает ссылку на массив size_t Crd() { size_t crd; return &amp;crd; }

Функция возвращающая массив - C++
#include &lt;iostream&gt; #include &quot;conio.h&quot; int *convertToBin() { int a = { 1, 2, 3, 4, 5}; return a; } int...


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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
22.02.2013, 19:03     функция возвращающая аргументу его значение сама по себе #9
Schizorb, Да. В обоих случаях я не прав. Погорячился.
Yandex
Объявления
22.02.2013, 19:03     функция возвращающая аргументу его значение сама по себе
Ответ Создать тему
Опции темы

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