Языки программирования для численных методов. Глушакова Т.Н - 67 стр.

UptoLike

67
Например, один из случаев, когда всегда
необходимо передавать параметр через указатель это вызов стандартной
функции scanf, которая вводит данные со стандартного ввода программы
(с клавиатуры ). Первым параметром в scanf передается форматная строка,
а вторым адрес переменной, которую необходимо ввести, например:
printf(введите n:\n);
scanf(%d,&n);
Если функция имеет параметр, описанный как указатель, тогда она
может изменить значение параметра. Рассмотрим два примера:
void func(int *n)
{
*n = 10;
}
void func2()
{
int n;
func(&n); /* n будет изменена */
}
void func(int n)
{
n = 10;
}
void func2()
{
int n;
func(n); /* n не может быть
изменена */
}
В правом столбце в функции func() создается копия переменной n (в
стеке), и ее изменения на переменную n в функции func2() повлиять не
могут. В первом же случае параметром func() передается адрес переменной
n в функции func2(), и путем разыменования указателя func() имеет доступ
непосредственно к этой переменной.
Массивы всегда передаются через указатель (т.к. имя массива есть
указатель на его первый элемент). Поэтому функция при присваивании
элементам массива нового значения всегда изменяет исходный массив .
Если функция получает входным параметром указатель и должна
изменить его, то вместо самого указателя надо передавать его адрес, т.е.
указатель на указатель.
Замечание . Если параметр функции описан как указатель, это не
означает, что при ее вызове обязательно указывается адрес какой-то
переменной. На самом деле в функцию может быть передан какой-то
существующий ранее указатель.
                                    67
      Например,       один    из       случаев,      когда       всегда
необходимо передавать параметр через указатель – это вызов стандартной
функции scanf, которая вводит данные со стандартного ввода программы
(с клавиатуры). Первым параметром в scanf передается форматная строка,
а вторым – адрес переменной, которую необходимо ввести, например:
      printf(“введите n:\n”);
      scanf(“%d”,&n);
      Если функция имеет параметр, описанный как указатель, тогда она
может изменить значение параметра. Рассмотрим два примера:
void func(int *n)                   void func(int n)
{                                   {
    *n = 10;                               n = 10;
}                                      }

void func2()                         void func2()
{                                    {
    int n;                               int n;
    func(&n); /* n будет изменена */     func(n); /* n не может быть
}                                    изменена */
                                     }
       В правом столбце в функции func() создается копия переменной n (в
стеке), и ее изменения на переменную n в функции func2() повлиять не
могут. В первом же случае параметром func() передается адрес переменной
n в функции func2(), и путем разыменования указателя func() имеет доступ
непосредственно к этой переменной.
      Массивы всегда передаются через указатель (т.к. имя массива есть
указатель на его первый элемент). Поэтому функция при присваивании
элементам массива нового значения всегда изменяет исходный массив.
      Если функция получает входным параметром указатель и должна
изменить его, то вместо самого указателя надо передавать его адрес, т.е.
указатель на указатель.
      Замечание. Если параметр функции описан как указатель, это не
означает, что при ее вызове обязательно указывается адрес какой-то
переменной. На самом деле в функцию может быть передан какой-то
существующий ранее указатель.