Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C. Тема 1. Раздел 11

.pdf
Скачиваний:
17
Добавлен:
21.03.2016
Размер:
1.2 Mб
Скачать

function2(1, (double)2); function2(1, 2.0); function2(1, (float)2);

Почему преобразование к float сработало?

Потому что при вызове функций происходит неявное преобразование чисел

float → double

char → int

short int → int

Часть 3

Передача по значению

Формальному параметру присваивается значение фактического параметра

Передача по ссылке

В формальный параметр может быть помещён сам фактический параметр (ссылка на фактический параметр)

Для указания этого типа передачи используется ключевое слово

Передача по имени

В формальный параметр помещается выражение для расчёта внутри подпрограммы

Передача через стек

Разновидность передачи параметра по значению

Понятия формальных и фактических параметров отсутствуют

Все параметры лежат на стеке, причём их типы, количество и порядок не контролируются компилятором

Реализация в Си: только передача по значению

Передача по ссылке осуществляется за счёт использования указателей

some_function(int i)

{

i++;

printf( "function i: %d\n", i ); return 1;

}

 

 

 

 

 

function i: 2

 

 

 

void main()

 

main i: 1

{

 

 

 

int i = 1;

 

 

 

 

 

 

some_function( i );

 

 

printf( "main i: %d\n", i );

}

 

 

 

some_function(int* i)

{

(*i)++;

printf( "function i: %d\n", *i ); return 1;

}

 

 

 

function i: 2

 

 

void main()

main i: 2

{

 

 

int i = 1;

 

 

 

 

some_function( &i );

 

printf( "main i: %d\n", i );

}

 

 

some_function(int* i)

{

*i = 10;

printf( "function i: %d\n", *i ); return 1;

}

 

 

 

function i: 10

void main()

main i: 10

{

 

 

int i;

 

 

 

 

some_function( &i );

 

printf( "main i: %d\n", i );

}

 

 

struct user

{

char* name; int age;

};

void print_user(struct user* u)

{

printf( "User name: %s\n", u->name ); printf( "User age: %d\n", (*u).age );

}

void main()

{

struct user u;

u.name = "Vasya Pupkin"; u.age = 20;

print_user( &u );

}

#define ARRAY_SIZE 5

void print_array( int* arr, int arr_size )

{

int i;

for( i = 0; i < arr_size; i++ )

{

printf( "arr[%d]: %d\n", i, arr[i] );

}

}

void main()

{

int a[ARRAY_SIZE] = {1, 2, 3, 4, 5}; print_array( a, ARRAY_SIZE );

}

#define ARRAY_SIZE 5

void print_array( int arr[], int arr_size )

{

int i;

printf( "Function array size: %d\n", sizeof( arr ) / sizeof( int ) );

for( i = 0; i < arr_size; i++ )

{

printf( "arr[%d]: %d\n", i, arr[i] );

}

}

void main()

{

int a[ARRAY_SIZE] = {1, 2, 3, 4, 5}; printf( "Main array size: %d\n",

sizeof( a ) / sizeof( int ) ); print_array( a, ARRAY_SIZE );

}

int abs( int i )

{

return i > 0 ? i : -i;

}

void main()

{

int i = -10; printf(

"Absolute value of %d: %d\n", i, abs( i ) );

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]