Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(л0)Переменные_указатели_ссылки_функции.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
538.11 Кб
Скачать

Int main()

{

int x, d, t[10];

float z, arr[20];

int *pVi;

float *pVf;

}

  1. Последний шаг – это дать функции те типы значений, которые она хочет получить.

функция Grow требует первый параметр типа int, второй -указатель на тип float.

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

Grow(x, pVf);

Grow(10, &z);

Grow(t[0], arr);

Кроме этого функция возвращает результат типа int в своем имени. Вы можете его использовать, если хотите:

d = Grow(x, pVf);

cout<<Grow(10, &z);

x = x + Grow(t[0], arr);

Неправильные варианты вызовов:

Grow(pVf, x); // порядок параметров нарушен: 1й – параметр не int, 2й – не float*

Grow(10); // функция требует 2 параметра, а не один

Grow(t, arr); //имя массива – это указатель на тип int, нужно значение типа int

z = Grow(x, pVf); // возвращаемое значение типа int, но z – типа float

Прототип функции не всегда позволяет точно определить входные и выходные параметры. Если имя функции имеет тип, отличный от void, то можно точно сказать, что функция возвращает как минимум одно значение. Например:

Int Carrage(int* cr);

Однако в данном случае нельзя однозначно сказать, чем является формальный параметр cr – входным или выходным значением. Такой механизм может быть использован как для передачи массива, так и для передачи адреса простой переменной типа int. Поэтому для определения назначения формальных параметров необходимо либо изучить тело функции, либо воспользоваться справкой (если функция является стандартной).

2.7. Задача. Все функции с помощью различных механизмов (передача по значению, по ссылке, по адресу) получают на вход целочисленное значение и возводят его в квадрат. Укажите формат вызова этих функций:

  1. при использовании целочисленной переменной (столбец 3)

  2. при использовании указателя на целочисленную переменную (столбец 4)

Прототип функции

Обращение к значению num внутри функции

Вызов функции

1

2

3

4

int val

int* ptr

void squareVal(int num)

num

squareVal( )

squareVal( )

void squarePointer(int *num)

*num

squarePointer( )

squarePointer( )

void squareReference(int &num)

num

squareReference( )

squareReference( )

void squarePointerReference(int* &num)

*num

-

squarePointerReference( )

#include <iostream>

#include <stdlib.h>

using std::cout;

using std::endl;

void squareVal(int num)

{

num = num * num;

cout<<"\t\tInside squareVal(int num): num = "<<num<<endl;

}

void squarePointer(int *num)

{

*num = (*num) * (*num);

cout<<"\t\tInside squarePointer(int *num): *num = "<<*num<<endl;

}

void squareReference(int &num)

{

num = num * num;

cout<<"\t\tInside squareReference(int &num): num = "<<num<<endl;

}

void squarePointerReference(int* &num)

{

*num = (*num) * (*num);

cout<<"\t\tInside squareReference(int &num): *&num = "<<*num<<endl;

}