|
Программирование >> Элементы языков с и с++
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, которая возвратит указатель на выделенный участок, после чего значение этого указателя надо будет присвоить указателю р, либо вы должны объявить массив символов размерности, соответствующей вводимой строке, и настроить указатель на этот массив. После этого можно работать с указателем. Кстати, функции тоже могут быть указателями , т. е. возвращать указатели на объекты заданного типа. В этом случае функция при ее объявлении имеет вид: <тип объекта, на который указывает указатель> <*имя функции>(аргументы функции). В этой функции аргументы объявлены как указатели, следовательно, при обращении к такой функции ей надо передать адреса переменных, а не их значения. А поскольку мы передали адреса переменных, то в теле функции по этим адресам можно изменять содержимое самих переменных. Например, когда мы пишем *а=*Ь;, это и есть работа с адресами.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |