|
|||
Указатели ⇐ ПредыдущаяСтр 4 из 4 Указатели 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);}
|
|||
|