Основы программирования на C++. Крыжановская Ю.А. - 18 стр.

UptoLike

Составители: 

18
ные параметры. Использование %s означает «жди параметра char*», а %d оз-
начает «жди параметра int». Однако, компилятор этого не знает, поэтому он
не может убедиться в том, что ожидаемые параметры имеют соответствую-
щий тип. Например:
printf("Мое имя %s %s\n",2);
откомпилируется и в лучшем случае приведет к какой-нибудь странно-
го вида выдаче.
Указатели
void f(int x){
x = 7;
}
main(){
int y = 17;
f(y);
printf("y=%d\n", y); /* печатает: y=17 */
}
В аргументе x передаётся копия значения y, поэтому x=7; не изменяет
значения у. Для того, чтобы вызываемая функция могла изменять значение
переменной, используются указатели.
void f(int *ptr){
*ptr = 7;
}
main (){
int y=17;
f(&y);
printf("y=%d\n", y); /* печатает: y=7 */
}
Здесь &y обозначает "указатель на переменную y" или "адрес перемен-
ной y", *ptr означает "разыменование указателя ptr", int *ptr; означает объяв-
ление переменной ptr, которая может содержать в себе указатель на перемен-
ную, хранящую int-число.
Указатели несколько различно ведут себя слева и справа от оператора
присваивания.
Справа от присваиваний и в формулах *pointer означает взять значение
переменной, на которую указывает
указатель, «хранящийся в переменной
pointer».
Слева от присваивания *pointer = 123; означает «положить значение
правой части (т.е. 123) в переменную, на которую указывает указатель, хра-
нящийся в переменной pointer».
Ниже описан обмен значений двух переменных с использованием адре-
сов и указателей:
void swap(int *a, int *b){
int tmp;
tmp = *a; *a = *b; *b = tmp;
}
void main(){
ные параметры. Использование %s означает «жди параметра char*», а %d оз-
начает «жди параметра int». Однако, компилятор этого не знает, поэтому он
не может убедиться в том, что ожидаемые параметры имеют соответствую-
щий тип. Например:
      printf("Мое имя %s %s\n",2);
      откомпилируется и в лучшем случае приведет к какой-нибудь странно-
го вида выдаче.
      Указатели
     void f(int x){
          x = 7;
     }
     main(){
          int y = 17;
          f(y);
          printf("y=%d\n", y);          /* печатает: y=17 */
     }
     В аргументе x передаётся копия значения y, поэтому x=7; не изменяет
значения у. Для того, чтобы вызываемая функция могла изменять значение
переменной, используются указатели.
     void f(int *ptr){
       *ptr = 7;
     }
     main (){
       int y=17;
       f(&y);
       printf("y=%d\n", y);         /* печатает: y=7 */
     }
      Здесь &y обозначает "указатель на переменную y" или "адрес перемен-
ной y", *ptr означает "разыменование указателя ptr", int *ptr; означает объяв-
ление переменной ptr, которая может содержать в себе указатель на перемен-
ную, хранящую int-число.
      Указатели несколько различно ведут себя слева и справа от оператора
присваивания.
      Справа от присваиваний и в формулах *pointer означает взять значение
переменной, на которую указывает указатель, «хранящийся в переменной
pointer».
      Слева от присваивания *pointer = 123; означает «положить значение
правой части (т.е. 123) в переменную, на которую указывает указатель, хра-
нящийся в переменной pointer».
      Ниже описан обмен значений двух переменных с использованием адре-
сов и указателей:
     void swap(int *a, int *b){
      int tmp;

       tmp = *a; *a = *b; *b = tmp;
     }
     void main(){
                                18