22935

ВКАЗІВНИКИ

Лекция

Информатика, кибернетика и программирование

1 довжина рядка int strlen char s { int i; for i=0; s= 0; s i; return i; } int strlen char s[] { int i; for i=0; s[i]= 0; i ; return i; } int strlen char s { int i; for i=0; s; s i; s трактується як булевий вираз s=0 означає лжу s=0 означає істину return i; }...

Русский

2013-08-04

53.5 KB

0 чел.

ТЕМА: ВКАЗІВНИКИ

Кожному  типу T відповідає  множина адрес полів ОП, де можуть зберігатись дані типу T. Нпр., типу  char  відповідають адреси окремих байтів ОП, типу int  адреси  2-байтних слів і т.д. Ці адреси складають тип вказівників   на T.  Як правило для подання вказівників використовують 16-ні  безнакові константи: 0X00FF(=255), 0x00FF(=255), 0x7FFF(=32767). Структура  вказівників залежить від архітектури процесора. Як правило,  ОП має сторінкову організацію, тобто розбита на сторінки (сегменти) розміром  байтів, кожна з яких має свій порядковий номер (базу). Адреса поля тоді має структуру пари (база, зсув. У межах фіксованого сегменту  вказують тільки зсув поля відносно його початку: від 0х0000  до  0x7FFF .

Син.         T *p;  /*   зимінна-вказівник  типу  Т */                             

            char *s;  /*   зимінна-вказівник  типу  char */

            char ch;  /*   змінна  типу  Т */

            int  *ip, n=10;  

& - операція взяття адреси змінної: &s, &nадреси змінних s та n.

*- операція розіменування вказівника: *p, *ip – змінна відповідного типу (T та int), що зберігається за адресою(= значенням)  вказівника.

Розіменовані змінні мають ті самі властивості, що і звичайні змінні даного типу. Нпр.,  змінна *ip може використовуватись як звичайна ціла змінна: *ip=0, n=*ip+2,  *ip<0     і т.д.

 

Адресна арифметика:  +, - , <, >, <=, >=,  !=, ++,  --  .

unsigned int k;

 

Пркл. 1 (довжина рядка)

int strlen (char *s)                                                      

{ int i;

  for (i=0; *s!=’\0’; s++)  i++;

  return i;

}

int strlen (char s[])                                                      

{ int i;

  for (i=0; s[i]!=’\0’; i++) ;

  return i;

}

int strlen (char *s)                                                      

{ int i;

  for (i=0; *s; s++)  i++;  /*   *s трактується як булевий вираз  (*s=0 означає лжу, *s!=0 означає істину )   */                                                          

  return i;

}

Табл..  Пріоритети операцій та порядок виконання

Операції

Порядок виконання

() [ ] ->

==>

! ~ ++ -- + _-  * & (тип) sizeof

<==

*  /  %

==>

+  -

==>

<<  >>

==>

<   <=   >   >=

==>

==   !=

==>

&

==>

^

==>

|

===>

&&

==>

||

==>

?:

<===

=  +=  -=  *=  /=  &=  |=  <<=  >>=

<==

,

==>

МАСИВИ ВКАЗІВНИКІВ

Пркл.

int array[10]; /* звичайний масив    */

int *pd[10];  /* масив показчиків   */

int *pd[]={&array[0], &array[2], &array[4]}  /* ініціалізований масив показчиків   */

Пркл. 2 (сортування масиву за зростанням та спаданням )

#define n 6

void main()

{ float array[]= {5.0, 2.0, 1.0, 3.0, 6.0, 4.0};

  float *pmin[n], *pmax[n], *temp;

  int i,j;

  for (i=0; i<n; i++)  pmin[i]=pmax[i]=&array[i];

  for (i=0; i<n-1`; i++)  

  for (j=i+1; j<n; j++)  

           { if (*pmin[i]< *pmin[j])  {temp=pmin[i]; pmin[i]=pmin[j]; pmin[j]=temp;

             if (*pmax[i]> *pmax[j])  {temp=pmax[i]; pmax[i]=pmax[j]; pmax[j]=temp;

           }

   printf(“\n за спаданням: \n”) ;   for (i=0; i<n-1`; i++)  printf(“\t %5.1f”, *pmin[i]);

   printf(“\n за зростанням: \n”);  for (i=0; i<n-1`; i++)  printf(“\t %5.1f”, *pmax[i]);

}

< stdlib.h>

void void malloc(unsigned int n)

Повертає безтиповий (адресу байту) вказівник на поле в динамічній памяті довжиною n  байтів. Якщо вільної такої ділянки не має, то повертає  NULL.

void  calloc(unsigned int n, unsigned int m)

Повертає безтиповий (адресу байту) вказівник на поле в динамічній пам’яті для розміщення масиву з  n елементів по  m  байтів. Якщо вільної такої ділянки не має, то повертає  NULL.

void free (void*p )  

Повертає  поле з адресою p  до вільної зони динамічної памяті

==============================================================================

ДИНАМІЧНІ МАСИВИ

ДМ – послідовності  однотипних елементів  з прямим доступом до компонент.

Пркл. 2 ( Створити  ДМ та роздрукувати його, розпочинаючи  з кінця)

void   main()

{ float *p; /* адреса динамічного  масиву   */

  int i,

       n; /* довжина ДМ   */

  scanf(“%d ”, &n);

  p=(float*) calloc(n, sizeof(float));

  for (i=0; i<n; i++) { printf(“p[%d]=”, i);  scanf(“%f ”, &p[i]);}

  for (i=n-1; i>=0`; i--)  

             printf(“\t p[%d]=%f”, i, p[i]);

             

   free(p);

}

Пркл. 3 (  Динамічна матриця з рядками різної довжини)

void   main()

{ char  *line; /* адреса динамічного  масиву з компонентами – адресами рядків матриці  */

  int i,j, n,m; /* n – кількість рядків матриці */

  scanf(“%d ”, &n);

  line=(char**) calloc(n, sizeof(char));

  for (i=0; i<n; i++)

       { scanf(“%d”, &m);  line[i]=(char*) calloc(m, sizeof(char));}

          for (j=0; j<m`; j++) line[i][j]=getchar();

           line[i][j]=’\0’;

        }

       ……     обробка матриці   ……………

    /* вивільнення памяті  */

     for (i=0; i<n; i++)   free(line[i]);

     free(line);

}


 

А также другие работы, которые могут Вас заинтересовать

943. Привод ленточного транспортёра 224.5 KB
  Промежуточный вал (расчёт на статическую прочность). Определение требуемой мощности электродвигателя. Определение частоты вращения вала электродвигателя. Определение действительного фактического передаточного числа. Крутящий момент в поперечных сечениях валов.
944. Проектирование автоматизированной информационной системы автомобильной стоянки на Delphi 753 KB
  Обзор существующих систем для автоматизации работы автомобильных стоянок. После анализа особенностей среды программирования Delphi и возможностей написания на ней программы было успешно разработано приложение Автостоянка, которое позволяет сотрудникам автостоянки осуществлять простой и удобный поиск клиентов и их авто по базе данных, добавлять новые записи, вести учет платежей за парковочные места.
945. Знакомство с операционной системой MS DOS 68.5 KB
  Просматривать содержимое дисков и каталогов. Выполнять действия над файлами. Выполнять действия над каталогами.
946. Основные команды работы с файлами и каталогами 103.5 KB
  Команды DOS состоят из имени команды и, возможно, параметров, разделённых пробелами. Имя команды и параметры могут набираться как прописными, так и строчными латинскими буквами.
947. Знакомство с программой Volkov Commander 63.5 KB
  Записать в тетрадь все команды и приглашение операционной системы, на которое вводилась каждая команда. Используя программу vc, зарисуйте структуру диска F:. Создайте в корневом каталоге диска E: новый файл с именем new.txt.
948. Знакомство с программными возможностями Volkov Commander 122.5 KB
  Сервисный пакет Volkov Commander обеспечивает в простой и наглядной форме выполнение наиболее употребительных операций при работе с файлами пользователя. Вызов операций, перечисленных в информационной строке экрана, осуществляется нажатием функциональных клавиш с соответствующими номерами.
949. Операционная система Windows XP 67.5 KB
  Запуск задачи в системе, принципы организации многозадачной работы в системе, вход в систему и выход из нее, изменение размеров и положение окон на экране, перемещение и переупорядочивание значков, использование меню, выполнение типичных действий с помощью меню.
950. Основы работы в операционной системе Windows XP 73 KB
  Работа с файловой структурой в программе Проводник. Исследование методов запуска программы Проводник. Поиск файлов. Создание ярлыков.
951. Привод ленточного конвейера 270.5 KB
  Нахождение мощности на приводном валу. Определение возможной частоты вращения вала электродвигателя. Выбор типа и схема установки подшипников. Расчет валов на статическую прочность и сопротивление усталости. Выбор смазочных материалов и системы смазывания. Расчет на сопротивление усталости.