Аргументы функций

В языке С аргументы функций передаются только по значению. Име­ются два способа передачи:

-  передаётся непосредственное значение данного,

-  передаётся значение адреса данного (указатель). Аргументы в функцию передаются через стек.

В язык 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%

Внимание! Если вы хотите обменяться постовыми с моим блогом почитайте эту статью.

Оставить комментарий