Хелпикс

Главная

Контакты

Случайная статья





Указатели



Указатели

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(){ int x, y; x = 1; y = 2; swap(&x, &y); printf("x=%d y=%d\n", x, y);}

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.