Другие языки программирования и технологии

Функции в С++ .50 ОЧКОВ за лучший и полный ответ.

Приведите пожалуйста примеры программы где есть объявление функции, определение функции (если это не одно и тоже) , и вызов функции. с понятными и подробными коментариями, ЧТОБ Я РАЗОБРАЛАСЬ ЧТО ЕСТЬ ЧТО (где формальные параметры, где фактические и как они передаются, и т. д.) .
Варианты передачи параметров по адресу и по ссылке, ЧТОБ Я ВИДЕЛА РАЗНИЦУ.
Варианты с переменным количеством параметров.
Я подчёркиваю - С ПОНЯТНЫМИ И ПОДРОБНЫМИ КОМЕНТАРИЯМИ.
Огромное спасибо.
про формальные и фактические параметры спрашивай у своего преподавтаеля! Что он там под этим подразумевает? Такого определения с языке С++ нет! И вообще такого понятия, как параметры функции в С++ нет. Есть только одно понятие - агрументы функции.

// объявление функции
int Test1(int param);

Пишется в заголовочных файлах (*.h). Определяет имя функции, тип возвращаемого значения, количество и тип агрументов

// определение функции
int Test1(int param)
{
// Здесь что то делается
....

return result;
}

Собственно сам код этой функции или реализация. Пишется в файлах *.cpp.

// в a передается значение переменной
viod Func1(int a)
{
// С a можешь делать все что хочешь, переменная, значение которой сюда передано не измениться
a ++;
printf("Func1, a = % d\n", a);
}

// в a передается указатель на пременную (её адрес)
viod Func2(int *a)
{
// оператор * разыменовывает указатель, т. е. получаешь объект, на который он указывает
// Модифицируется переменная на которую указывает указатель
(*a)++;
printf("Func2, *a = % d\n", *a);
}

// в a передается ссылка на пременную (тоже её адрес)
viod Func3(int &a)
{
// все операции производятся над объектом, на который ссылается a
a ++;
printf("Func3, a = % d\n", a);
}

int main()
{
int i = 0;
int j = 0;
int k = 0;

printf("main, i = % d, j = % d, k = % d", i, j, k);

// значение i копируется в а
Func1(i);

// адрес (указатель) j копируется в а
Func2(&j);

// адрес (ссылка) k копируется в а
Func3(k);

printf("main, i = % d, j = % d, k = % d", i, j, k);
}

PS: купи книжку, больше пользы будет. И компилятор какой нибудь найди и попробуй написать что нибудь.
Аскер Акжанов
Аскер Акжанов
21 360
Лучший ответ
Вам уже раза 4 все это написали с подробными комментариями. Мне пятый раз писать лень, поэтому дам ссылку на написанное до меня: http://www.intuit.ru/department/pl/cpp/5/
Как говорится, читать отсюда и до обеда.
#include<iostream>

int testMethod(char*, int&, int);

int main(void)
{
char* a = new char(5);
strcpy(a, "test");
int b;
int c;
testMethod(a, b, c);
delete test;
}

int testMethod(char* a, int& b, int c)
{
a++;
b++;
c++;
};

1. Первый раз где ты видишь testMethod - это обьявление функции.
2. Второй раз - определение.
3. a - передача по адрессу
b - по ссылке