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);

}


 

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

50905. Определение ёмкости конденсатора при помощи баллистического гальванометра 125.5 KB
  Определение ёмкости конденсатора при помощи баллистического гальванометра. Данные для расчета баллистической постоянной гальванометра К CЭ= мкф UЭi В nЭi мм lЭi = lЭ lЭi lЭ lЭi2 1 2 3 4 5 lЭ = Результаты измерения ёмкости конденсаторов и : UXi В nXi мм lXi = lX lXi lX lXi2 1 2 3 4 5 lX = ...
50906. Измерение удельного заряда электрона методом магнетрона 40 KB
  Наименование средства измерения Предел измерения Цена деления шкалы Класс точности Предел основной погрешности Вольтметр Микроамперметр Амперметр Магнетрон: А соленоид D = мм L= мм N= ; Б диод R= мм Погрешности: А Б 3.Оценка границ погрешностей результата измерения; 9.
50908. Применение технических средств системы охранного телевидения для предупреждения угроз несанкционированного доступа злоумышленника к конфиденциальной информации 1.18 MB
  Первичный источник видеосигнала в составе системы охранной сигнализации; видеоканал: Совокупность технических средств СОТ обеспечивающих передачу телевизионного изображения от одной видеокамеры до экрана видеомонитора в составе СОТ; видеомонитор: Устройство отображения видеоинформации в составе СОТ; видеорегистратор: Устройство предназначенное для записи воспроизведения и хранения видеоинформации в составе СОТ; видеосервер: Устройство предназначенное для работы в составе цифровой СОТ и обеспечивающее преобразование аналогового...
50909. ОПРЕДЕЛЕНИЕ СКОРОСТИ ПУЛИ ПРИ ПОМОЩИ КРУТИЛЬНОГО БАЛЛИСТИЧЕСКОГО МАЯТНИКА 470 KB
  Цель работы: изучение принципа работы баллистического маятника и закона сохранения момента импульса экспериментальная проверка зависимостей между физическими величинами характеризующими крутильные колебания; экспериментальное определение постоянной упругих сил кручения и момента инерции баллистического маятника; определение коэффициента затухания крутильных колебаний. экспериментальное определение с помощью баллистического маятника скорости пуле. Она состоит из: баллистического маятника.
50912. Изучение поляризации отраженного от диэлектриков света 51 KB
  Для определения значения угла Брюстера по компоненте интенсивности отраженного света параллельной плоскости падения проводим измерения I2 в области ее минимальных значений изменяя значения угла с шагом 1. Зависимость интенсивности компоненты отраженного света параллельной плоскости падения от угла падения удобно занести в таблицу.644 Вывод: изучили свойства света поляризованного при отражении от диэлектриков изучили законы поляризации света при отражении от прозрачной среды.
50913. Построение теста с помощью MS Excel 549.5 KB
  Для организации выбора варианта ответа выполняем последовательность действий: Выбирается пункт меню Данные Проверка В диалоговом окне выбирается тип данных Список В окне Источник перечисляются варианты ответов через точку с запятой. Например: Для подведения итогов тестирования можно предусмотреть специальный лист на котором будут подведены итоги ответов на каждый вопрос. Например: Для выставления оценки необходимо подсчитать какое количество процентов составляет число правильных ответов от общего числа вопросов исходя из общих...