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

}


 

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

47351. Управління списками та базами даних в середовищі MS Excel 797.39 KB
  MS Excel як засіб організації бази даних. Способи введення даних у список та перевірки цих даних Засоби сортування даних списків Поняття структури та структуризації робочих листів. Автоматичне обчислення поміжних підсумків MS Excel як засіб організації бази даних. Способи введення даних у список та перевірки цих даних
47352. Болота. Особенности земляных работ в болотистых месностях 23.4 MB
  Проектирование автомобильных дорог в болотистых районах требуют предварительного изучения и исследования болота, важное значение имеет строение болота, условие формирования болота, а также соотношение прочности его слоёв. Согласно СНИП 2.05. 02 -85 различают 3 типа болот...
47353. Проектирование заготовки 108.5 KB
  Определить вид заготовки, используемый для изготовления данной детали; определение метода получения заготовки; является функцией специалиста – технолога литейщика или давленца; Наметить расположение плоскости разъема; которое определяет распределение напусков, формовочных, штамповочных уклонов;
47354. Фільтрація та консолідація даних в середовищі MS Excel 319.52 KB
  Пошук та фільтрація – це операції, які найчастіше виконуються над базами даних (списками). Для цього програмою MS Excel надається набір засобів.
47355. Аналіз даних в середовищі MS Excel 110.18 KB
  Ознайомити з засобами аналізу даних в середовищі MS Excel, можливостями аналізу за допомогою функцій і таблиць підстановок; набути навичок проведення аналізу за допомогою зведених таблиць...
47356. ІСТОРІЯ ШОРТ, ТА ЇХ ДЕТАЛЬНЕ СТВОРЕННЯ 981.49 KB
  Як тлумачить словник, шортами називаються укорочені брюки зручні для літнього відпочинку. Шорти старше брюк! Вже так повелося, що спочатку всі люди ходили в спідницях. Потім до стародавніх дизайнерів прийшла думка зробити розріз посередині і зшити частини тканини. Так спідниця перестала обмежувати ноги при ходьбі. Але це ще не були шорти. Історія походження шорт тільки починалася.
47358. Общественные отношения, возникающие в связи определением организации адвокатуры России и некоторых зарубежных странах 333.5 KB
  В последние годы в нашей стране активно формируется рынок предоставления квалифицированной правовой помощи. Однако того количества профессиональных юристов, которое действует сегодня на территории Российской Федерации, явно недостаточно для обеспечения граждан и организаций юридической помощью.
47359. ЦИКЛ ТЕПЛОВОГО НАСОСА 650 KB
  Изучение цикла теплового насоса. Определение отопительного коэффициента (коэффициента преобразования) теплового насоса. Определение количества низкопотенциальной теплоты, отбираемой у окружающей среды. Определение количества теплоты, передаваемой в систему отопления помещения.