русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Передача в функцию массивов, не являющихся строками


Дата добавления: 2013-12-23; просмотров: 1026; Нарушение авторских прав


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

Передача параметров в функции по указателю (по ссылке)

Рассмотрим, как можно добиться того, чтобы функция могла изменить значение параметра, и это изменение сохранялось бы после выхода из функции. Изменим немного представленный пример.

#include <stdio.h>



void MyFun(int* pa)

{

*pa=100;

}

void main()

{

int a=10;

MyFun(&a);

printf("a=%d", a); // Будет напечатано a=100

}

В этом примере значение переменной a будет изменено, так как в этом случае в стек помещается не копия переменной a, а адрес переменной, при выполнении операции обращение по адресу внутри функции, новое значение будет записано по адресу исходной переменной а и переменная будет изменена. Данный процесс демонстрируется на рисунке.

  Оперативная память
….. ….. …..   Стек
Переменная a=10, 100
pa - адрес a
*pa=100

 

 


Такой механизм передача параметров называется передача параметров по указателю.

Таким образом можно сделать вывод, для того чтобы функция могла изменить значение параметра, параметр должен передаваться по указателю, т.е. в функцию необходимо передавать адрес исходного объекта (переменной).

Примечание. Поэтому в стандартной функции ввода scanf и некоторых других функциях при вызове передается адрес переменной (используется операция &).

В языке Си++ появился новый тип – ссылки. В некоторых случаях их удобно использовать вместо указателей в качестве параметров функции, так как ссылка, по сути, является указателем, но к ней не надо применять операцию обращения по адресу («*»). В представленном ниже примере функция также меняет значение параметра.

#include <stdio.h>



void MyFun(int& la) // Параметр функции - ссылка

{

la=100; // Не нужно применять операцию – обращение по адресу

}

void main()

{

int a=10;

MyFun(a); // При вызове не нужно получать адрес

printf("a=%d", a); // Будет напечатано a=100

}

 

Имя массива без скобок является указателем на массив, в функцию массив передается по указателю (передается адрес первого элемента) и в качестве отдельного параметра передается число элементов массива (за исключением случая, когда размерность заранее определена и задается константой).

Ниже представлен пример функции, которая считает сумму элементов массива.

#include <stdio.h>



int GetSum(int *p, int n) // p - указатель на массив, n - число элементов

{

int sum=0; // Начальное значение суммы

int i;

for(i=0; i<n; i++) sum+=p[i]; // Прибавляем к сумме элементы массива

return sum;

 

}

void main()

{

int M[]={1, 2, 3, 4, 5};

int sum=GetSum(M, 5); // Вызов функции

printf("sum=%d", sum); // sum=15

}

 

При передаче массивов в функцию разрешена другая форма записи заголовка функции:

int GetSum(int p[], int n)

 



<== предыдущая лекция | следующая лекция ==>
Передача параметров в функции по значению | Функции с переменным количеством параметров


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.