Когда в C там использовали слова «передать по ссылке», то это означает, что объект передается в функцию косвенно посредством указатель на объект.
Рассмотрим следующий показательной программы
#include <stdio.h>
void f(int *sum, int x, int y)
{
*sum = x + y;
}
void g(int sum, int x, int y)
{
sum = x + y;
}
int main(void)
{
int x = 1, y = 2;
int sum;
sum = 0;
printf("Before call of f sum = %d\n", sum);
f(&sum, x, y);
printf("After call of f sum = %d\n", sum);
sum = 0;
printf("Before call of g sum = %d\n", sum);
g(sum, x, y);
printf("After call of g sum = %d\n", sum);
}
Выход программы
Before call of f sum = 0
After call of f sum = 3
Before call of g sum = 0
After call of g sum = 0
Первая функция, функция f
. принимает аргумент sum
по ссылке, используя указатель на sum
. Таким образом, после вызова функции была изменена переменная sum
.
Вторая функция, функция g
, принимает аргумент sum
по значению, которое является функцией, связанной с копией аргумента. Таким образом, любые изменения копии не влияют на значение исходного аргумента.
В C++ помимо этого значения слов «передать по ссылке» в кадре C имеется дополнительное значение, потому что C++ вводит понятие ссылок, как специальный тип деклараторов, и соответственно определяет понятие ссылочного типа.
Таким образом, на C++ вы можете еще одну возможность передать значение по ссылке. Вы можете использовать ссылочный тип.Например, вы могли бы определить функцию, для приведенного выше примера следующим образом
void f(int &sum, int x, int y)
{
sum = x + y;
}
В этом случае в качестве аргумента передается по ссылке, что соответствующий параметр типа является ссылочным типом, то функция будет иметь дело с исходным аргументом вместо его копии.
.
'void Func2 (DATA & d) {' недействителен (стандартный) C - с чем вы это компилируете? – UnholySheep
В C нет доступа по ссылке –
C не имеет ссылок. Однако вы можете * эмулировать * его указателями. –