Программирование >>  Элементы языков с и с++ 

1 ... 36 37 38 [ 39 ] 40 41 42 ... 200


getch();

задержка изоОражения на экране

while((c=getchar() != eof)); /*для обеспечения цикличности ввода номеров элементов: признак конца цикла ввода - Ctrl+z*/

I C:\WINOOWS\system32\cmd.exe

enter the elements number <0-9> >5 i=5 flm=5 <Pa+i>=5 <fl + i>=5 5

bnter t)ie elements nunber <в-9> >8 i=8 flm=8 <Pa+i>=8 <fl+i>=8 8

111я продолжения нажните любую клавишу

Рис. 7.2. Результат работы программы листинга 7.2

Операции над указателями

Над указателями, содержащими адрес одного и того же объекта, можно выполнять определенные операции:

□ операции отношения (>, <, и т. д.). Например, р и Q указывают на массив а[ ]. Тогда имеет смысл операция р < q. Это говорит о том, что р указывает на элемент с меньшим индексом, чем q. Тогда имеет смысл и разность q - р, которая определяет количество элементов между р и q;

□ операции равенства и неравенства (==, ! =);

□ указатель можно сравнивать с null.

Все остальные арифметические операции к указателям неприменимы.

Указатели и аргументы функций

Мы видели, что аргументы в функцию можно помещать либо передавая и.\ значения, либо - ссылки на эти значения (т. е. адреса). В последнем случае значения переданных по ссылке переменных могут быть изменены в теле i функции. Примером этого может служить программа, текст которой приводится в листинге 7.3 (результат работы программы - на рис. 7.3).



Листинг 7.3

.......................J

23.срр : Defines the entry point for the console application. Iinclude stdafx.h linclude <stdio.h> Jinclude <conio.h>

/♦функция, меняющая местами значения переменных: значение, которое было в переменной а , переместится в Ь и наоборот*/

int f(int *а, int *Ь) параметры - указатели (

int i=*a;

*a=*b;

b=i;

return(О) ;

int tmain(int argc, char* argv[]) I

int c=12;

int d=120;

printf( The (c,d)s value before function application: c= d,d=%d\n ,c,d) ; f(&c, &d); передача адресов переменных

printf( The (c,d)s value after function application: c=%d d=%d\n ,c,d) ;

getchO;

C:\WINDOWS\$ystem32\cmd.exe

he <c,d>s value before function application: c=12,d=12u Ihe <c.d>s value after function application: c=120 d=12 11ля продолжения нажмите любую клавишу ....

Пак 960



Указатели символов и функций

Символьная константа или массив символов в языке С - это строка символов с признаком конца (символом \0 )-

Если, например, имеем char а [Ю];, то а - это указатель на первый элемент массива а [О].

Если, с другой стороны, имеем char *р=&а[0], то наряду с инициализацией а [ ] = аЬс ;, МОЖСМ записать *р= аЬс ;.

Компилятор в обоих случаях, начиная с адреса, помещенного в указатель р, разместит символы а, ь, с.

Следовательно, оперирование именем массива и указателем на этот массив равносильно. Но за исключением некоторого небольшого обстоятельства: если мы хотим записать строку символов в некоторое место памяти, то при объявлении char а [100]; компилятор выделит 100 байтов для помещения строки символов, и мы сможем записать в массив а[] свои символы. Если же объявить указатель char р, то, чтобы записать символы, начиная с адреса, указанного в р, указатель должен быть предварительно инициализирован, т. е. ему должен быть присвоен некий адрес, указывающий на участок, где будут располагаться объекты типа char. Этот участок должен быть получен либо с помощью функции maiioco, которая возвратит указатель на выделенный участок, после чего значение этого указателя надо будет присвоить указателю р, либо вы должны объявить массив символов размерности, соответствующей вводимой строке, и настроить указатель на этот массив. После этого можно работать с указателем.

Кстати, функции тоже могут быть указателями , т. е. возвращать указатели на объекты заданного типа. В этом случае функция при ее объявлении имеет вид:

<тип объекта, на который указывает указатель> <*имя функции>(аргументы функции).

В этой функции аргументы объявлены как указатели, следовательно, при обращении к такой функции ей надо передать адреса переменных, а не их значения. А поскольку мы передали адреса переменных, то в теле функции по этим адресам можно изменять содержимое самих переменных.

Например, когда мы пишем *а=*Ь;, это и есть работа с адресами.



1 ... 36 37 38 [ 39 ] 40 41 42 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика