ОК, давайте начнем с рассмотрения основного:
void main()
{
cout << "Making a cat ...\n";
SimpleCat Frisky;
cout << "Calling FunctionTwo ..\n";
FunctionTwo(&Frisky);
system("pause");
}
Единственное, что может не иметь для вас смысла, если FuctionTwo(&Frisky)
. То, что это делает, передает адрес от Frisky
до FucntionTwo()
. Когда &
помещается перед любой переменной, это просто означает захват адреса этой переменной.
Теперь давайте посмотрим на FunctionTwo()
:
SimpleCat *FunctionTwo (SimpleCat *theCat)
{
cout << "FunctionTwo, Returning... \n";
return theCat;
}
FunctionTwo
принимает указатель SimpleCat
. В этом случае SimpleCat
уже определен как структура класса, который вы определили выше. Что означает *
, так это то, что всякий раз, когда вы работаете с переменной theCat
, вы работаете с адресом того, что было передано в функцию. Вот почему вам нужно разыменовать Frisky
перед передачей его в функцию. Функция ищет адрес того, что передается.
Последнее, что вы видите FunctionTwo
возвращает переменную theCat
. Поскольку он был передан как Pointer , его необходимо вернуть как указатель. Вот почему функция объявляется как SimpleCat *FunctionTwo()
, это готовит код для события, в котором тип возвращаемого значения - не целое значение, а ссылка на переменную со значением.
Здесь вы можете получить понятия Передача по ссылке и Передача по значению .