Аргументы функций
Posted in C++ on 16. Фев, 2011
В языке С аргументы функций передаются только по значению. Имеются два способа передачи:
- передаётся непосредственное значение данного,
- передаётся значение адреса данного (указатель). Аргументы в функцию передаются через стек.
В язык C++/NET введен новый тип данных ссылка (см. раздел 4.7), а в языке С# – модификатор ref параметра функции, которые позволяют передавать аргументы и получать возвращаемое ими значения в виде ссылки. Пример 4.10.1 иллюстрирует различные способы передачи и получения данных функциями Fl(), F2() и F3(). В качестве передаваемых данных взята структура, включающая целочисленную и булевскую переменные.
Пример 4.10.1. Различные способы передачи и получения данных.
/////////////////// //C++/CLI #include “stdafx.h”
// Описание структуры struct ST
{
int x; // Открытая целочисленная переменная
bool с; // Открытая булевская переменная
};
// Описание функций void Fl (ST st) // Передаются непосредственные значения данных
{
st.x= 3; st.c= true;
}
void F2 (ST list) // Данные передаются через ссылки {
st.x= 3; st.c= true; }
void F3 (ST *pSt) // Передаются значения указателей данных
{
pSt->x= 5; pSt->c= false; >
58
void main ()
{
STstl= {1, false};
System::Console::WriteLine (”stl.x= ” + (stl.x).ToString() +
” stl.c= ” + stl.c); Fl (stl); // Передать данные по значению System: :Console::WriteLine (”stl.x= ” + (stl.x).ToString() +
” stl.c= ” + stl.c); F2 (stl); // Передать данные по ссылке System::Console::WriteLine (”stl.x= ” + (stl.x),ToString() +
” stlx= ” + stl.c); F3 (&stl); // Передать данные по указателю System::Console::WriteLlne (”stl.x= ” + (stl.x).ToString() +
” stl.c= ” + stl.c);
>
/*
Result:
stl.x= 1 stl,c= False
stl.x»* 1 stl.c* False
stl.xa 3 stl.c= True
stl.x= 5 stlx= False
////////////////////
// C#
using System;
struct ST
public int x; public String c;
class C4_10_l
{.
static void Fl (ST st) // Передаются непосредственные значения
{
st.x= 3; stc= “b”;
}
static void F2 (ref ST st) // Данные передаются через ссылку
{
st.x= 3; st.c= “b”;
}
static void Main ()
{
STstl= new ST(); stl.x= 1; stl.c= “a”; Console.WriteLine (”stl.x= {0} stl.c= {1}”, stl.x, stl.c);
Fl (stl);
Console.WriteLine (”stl.x= {0} stl.c= {!>”, stl.x, stl.c);
59
F2 (ref stl);
Console.WriteLine (”stl.x= {0} stl.c= {1}”, stl.x, stl.c);
} } /* Result:
stl.x= 1 stl.c= a stl.x= 1 stl.c= a stl.x= 3 stl.c= b *l
C++/CLI. В языке C++/GLI функции должны быть описаны или объявлены до их использования. Поэтому в С++/СЫ-программе примера 4.10.1 функции Fl(), F2() и F3() описаны до главной функции main(), в которой они вызываются. Ссылочные параметры помечаются символом “&”. Из результата работы программы видно, что выполнение функции Fl() не меняет значения переменных структуры stl, поскольку эти значения не передаются из тела функции через аргумент. Вызов же функции F2(() с ссылочным параметром и функции F3() с параметром-указателем изменил значения переменным stl.x и stl.c – осуществилась передача значений из тела функций через аргументы по ссылке и по указателю.
Раньше продвигать сайт было достаточно просто ввиду несложных алгоритмов поисковых систем, в наши дни продвинуть сайт – это задача для целого комплекса мер по оптимизации и маркетингу в сети, продвижение сайтов сейчас актуально как никогда.
Популярность: 1%
Внимание! Если вы хотите обменяться постовыми с моим блогом почитайте эту статью.