Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Передача массива в функцию ?  (Прочитано 59651 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #30 : 02-06-2008 20:09 » 

хм а ечли убрать знак амперсанта это ведь будет передача по ссылке ?
нет, это будет по значению передача
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #31 : 02-06-2008 20:10 » 

Это кстати очень легко проверить. Переменная, переданная в функцию, при выходе из функции должна сохранить свое значение, что для массива не верно.
Код:
#include <iostream>
using std::cout;
using std::endl;

void dell(int a[10][10])
{
   for(int x=0; x<10; x++)
      for (int y=0; y< 10; y++)
      {
         a[x][y]=15;
      }
}

int main()
{
   int a[10][10];
   dell(a);
   for(int x=0; x<10; x++)
   {
      for (int y=0; y< 10; y++)
      {
         cout << a[x][y] << " ";
      }
      cout << endl;
   }
     
   return 0;
}
Код распечатает матрицу 10*10 из числа 15. При передаче просто переменной такого не должно было произойти.
Вот пример
Код:
#include <iostream>
using std::cout;
using std::endl;

void dell(int a)
{
   a=20;
}

int main()
{
   int a=15;
   dell(a);
   cout << a << endl;
   return 0;
}
Хоть в функции и произошло изменение, но переменная сохранила свое значение, и программа распечатает число 15.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #32 : 02-06-2008 20:12 » 

alliance,

чтоб не путаь себя, посмотри пример не с массивом:

fff1(int i);
fff2(int& i);
fff3(int* pi);

//------------
int n;

fff1(n); по значению
fff2(n); по ссылке
fff3(&n); по указателю
Записан

alliance
Постоялец

ru
Offline Offline

« Ответ #33 : 03-06-2008 11:43 » 

nt Array[10];
f(Array,10);

...

f(int*& array, int nLen)
{
   array[7]=...;
}

здесь мы ведь передаем ссылку науказатель,а не ссылку на массив вроде ?

Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #34 : 03-06-2008 11:46 » new

int*& - это тип "ссылка на указатель на int"
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #35 : 03-06-2008 11:48 » 

alliance, чтоб ещё более тебя распутать Улыбаюсь Запомни, что ссылка - это псевдоним. И поэтому , ссылка работает точно так же, как-то, на что она ссылается (а реально компилятор оперирует указателем - только явно этого не видно)
Записан

Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines