|
Программирование >> Элементы языков с и с++
using namespace System; int main(array<System:: String > args) I Message M= gcnew Message ; M->sender= The message to all ; M->data= 24.02.2007 ; Console::WriteLine(M->sender); Console:iWriteLine(M->data); Console::WriteLine(L Hello World ); Здесь объявлена некая структура Message ссылочного (ref) типа. Элементами ее являются указатели-ссылки на объект типа string (строковые данные) sender, receiver, data. В ГОЛОВНОЙ программе mainO ДЛЯ структуры Message утилитой gcnew выделяется память и возвращается указатель м типа Message на эту структуру. Это аналог известной функции maiioc (). Если вы внимательно посмотрите на текст программы, то заметите, что она не похожа на те консольные программы, которые мы уже рассматривали. До сих пор мы их строили по шаблону Win32 Console Application, а в последнем случае воспользовались шаблоном CLR Console Application. Этот шаблон, как мы уже видели, предполагает подключение к тексту программы специального пространства System, содержащего классы, которые задают ссылочные типы данных и функции работы с ними. В частности, функция writeLineO (вывод на печать) принадлежит этому же пространству. А нам как раз и надо работать с такими данными. Подключение шаблона CLR Console Application к созданию приложения происходит там же, где и подключение к шаблону Win32 Console Application. C:\WINDOWS\systero32\cmd.eMi rriie message to all 24.02.2007 Hello IJorld я продолжения нажиите любую клавииу . Глава!] Указатели и массивы Интересно соотносятся между собой указатели и массивы. Пусть имеем] массив: int А[10]; И указатель, указывающий на какой-то объект типа int: int Pa; После объявления значение указателя никак не определено, как не onpeflcnt 1 но и значение любой переменной (под них компилятор только выделяет соответствующую память). Настроим указатель на массив а[]. Адрес первого] элемента массива занесем в указатель: . Ра=&А[0]; Как мы видели ранее, Pa+i будет указывать на i-й элемент массива, т.е.] можно достать такой элемент из массива путем выполнения оператора: int а=*(Pa+i); Но по определению массива мы можем записать: int а=а[i1; Мы говорили ранее, что массив элементов строится в языке С так, что erol имя- это адрес первого элемента массива, в нашем случае а=&а[0] и Ра=&а[0]. Следовательно: Ра=а Pa+i = A+i *(Pa+i)=*(A+i)=A[i] Более того, хотя Ра - это просто переменная, содержащая адрес, но когда 1 она содержит адрес массива, то можно писать Pa[i]=A[i], т. е. обращаться к] элементам массива можно через индексированный указатель. Пример программы, демонстрирующей вышесказанное, приводится в листинге 7.2 (все пояснения даны по тексту программы), результат работы про-1 граммы - на рис. 7.2. Листинг 7.2 22.СРР : Defines the entry point for the console application. -------Ввод строки с клавиатуры--------------- int getiine (char s[],int lim) I int c,i; for(i=0; i<lim-l && (c=getchar()) != eof && с != \n; i++) s[i]=c; s[i]=\0; i++; I /кия. учета количества return(i) ; int tinain(int argc, char* argv[]) I int A[maxline]={0,1,2,3,4,5,6,7,8,9}; инициализация массива int *Pa=&A[0]; настройка указателя на массив char s[maxline]; для ввода номера элемента массива int с; do для обеспечения цикличности ввода номеров элементов printf( enter the elements number <0-9> > ); запрос на ввод номера элемента \ getiine (s, max line); ввод номера элемента как строки символов int i=atoi(s); преобразование номера элемента в число printf( i=%d A[i]=%d *(Pa+i)=%d *(A+i)=%d %d\n , i, A[il, *(Pa+i), *(A+i), Pa[i]); Hnclude stdafx.h {include <stdio.h> Jinclude <conio.h> getch() Jinclude <stdlib.h> atoiO Wefine maxline 1000 Jdefine eof -1
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |