ВУЗ:
Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 16
- 17
- 18
- 19
- 20
- …
- следующая ›
- последняя »