Здавалка
Главная | Обратная связь

Указатели - аргументы функций. Передача аргументов по указателю.



Так как в C передача аргументов функциям осуществляется "по значению", вызванная процедура не имеет непосредственной возможности изменить переменную из вызывающей программы. Что же делать, если вам действительно надо изменить аргумент? Например, программа сортировки захотела бы поменять два нарушающих порядок элемента с помощью функции с именем swap. Для этого недостаточно написать

swap(a, b);

определив функцию swap при этом следующим образом:

  void swap(int x, int y) { int temp;   temp = x; x = y; y = temp; }  

Из-за вызова по значению swap не может воздействовать на аргументы а и b в вызывающей функции.

К счастью, все же имеется возможность получить желаемый эффект. Вызывающая программа передает указатели подлежащих изменению значений:

swap(&a, &b);

Так как операция & выдает адрес переменной, то &a является указателем на a. В самой swap аргументы описываются как указатели и доступ к фактическим операндам осуществляется через них

  void swap(int*px, int*py) { int tmp;   temp = *px; *px = *py; *py = temp; }
Предыдущая Оглавление Следующая  
Предыдущая Оглавление Следующая
           

Домашнее задание

  1. Дан массив целых чисел. Воспользовавшись указателями, поменяйте местами элементы массива с четными и нечетными индексами (т.е. те элементы массива, которые стоят на четных местах, поменяйте с элементами, которые стоят на нечетных местах).
  2. Даны два массива, упорядоченных по возрастанию: А[n] и B[m]. Сформируйте массив C[n+m], состоящий из элементов массивов А и В, упорядоченный по возрастанию.
  3. Даны два массива : А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать:
    • Элементы обоих массивов;
    • Общие элементы двух массивов;
    • Элементы массива A, которые не включаются в B;
    • Элементы массива B, которые не включаются в A;
    • Элементы массивов A и B, коотрые не являются общими дял них (то есть объединение результатов двух предыдущих вариантов).
Предыдущая Оглавление Следующая

 

Предыдущая Оглавление Следующая

Тест для самопроверки

Правила прохождения теста просты:

  • Каждый вопрос может иметь несколько правильных вариантов ответа;
  • За каждый верно отмеченный вариант вы получаете +1 балл;
  • За каждый неверно отмеченный вариант вы получаете -1 балл;
  • Результат выводится в процентной форме (50%, 90% и т.д.);
  • Удовлетворительный результат - 80% и выше.

Удачи!

 

1. Что будет на экране в результате выполнения следующего фрагмента кода?
  long ar[3]={1,2,3};float*a; a=ar; cout<<*(a+1);
 
 
  2.0
  Ошибка на этапе выполнения
 
  Ошибка на этапе компиляции
 
2. Что будет на экране в результате выполнения следующего фрагмента кода?
  long ar[3]={1,2,3};long*a;ar=a;cout<<*(ar+1);
 
 
 
  Ошибка на этапе выполнения
 
  Ошибка на этапе компиляции
 
3. Что будет на экране в результате выполнения следующего фрагмента кода?
  int ar[3][3]={{1,2,3},{4,5,6},{7,8,9}};int*ptr=ar[0];ptr+=8;cout<<*ptr;
 
 
 
  Неопределенное значение
  Ошибка на этапе компиляции
  Ошибка на этапе выполнения
 

Вы сдали тест на .

Предыдущая Оглавление Следующая

 


 

Предыдущая Оглавление Следующая

Урок №13.

  • Общие сведения о ссылках.
  • Ссылочные параметры. Передача аргументов по ссылке.
  • Ссылки в качестве результатов функций.
  • Операторы выделения памяти new и delete.
  • Домашнее задание.
  • Тест.
Предыдущая Оглавление Следующая  
Предыдущая Оглавление Следующая
           






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.