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

}


 

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

6585. Современная западная философия, условия возникновения и основные направления 33.8 KB
  Современная западная философия Условия возникновения. Основные направления Современной западной философией принято называть философию, которая возникла после немецкой классической философии и в значительной степени развивалась на ее базе...
6586. Философия бытия (онтология). Материя и ее атрибуты. Категории диалектики 31.98 KB
  Философия бытия (онтология). Философская категория бытия. Формы бытия. Материя и ее атрибуты. Диалектика. Категории диалектики. Проблема бытия изначально включала два подхода в ответе на вопрос: что избрать первоначалом философствован...
6587. Человек и природа. Экологическое сознание и перспективы цивилизации 29.32 KB
  Человек и природа Общество и природа в истории философии. Экологическое сознание Перспективы цивилизации Взаимоотношения общества с природой понимаются как отношения между обществом - целостной системой человеческого общежития - и пр...
6588. Человек как предмет философии. Сущность и содержание антропосоциогенеза 31.99 KB
  Человек как предмет философии. Проблема человека в истории философии. Сущность и содержание антропосоциогенеза. Биологическое и социальное в человеке. Немецкому философу-просветителю Иоганну Гердеру, в трудах которого философия в...
6589. Ценности человеческого существования. Человек в системе мира. Человек и Космос 26.73 KB
  Ценности человеческого существования. Учение о ценностях. Проблема жизни и смерти. Человек в системе мира. Человек и Космос. Человек чуть ли не постоянно находится в состоянии поиска ответа на знаменитый вопрос Сократа: Что есть благо...
6590. Свобода и ответственность личности. Бегство от свободы и вседозволенность 30.91 KB
  Свобода и ответственность личности. Свободен ли человек? Проблема выбора. Бегство от свободы. Вседозволенность. Свобода - нравственный императив. Свобода - одно из важнейших понятий философии. О свободе (независимости и самостоятельн...
6591. Сознание и познание. Познание, истина, практика 34.34 KB
  Сознание и познание Сущность и возникновение сознания. Познание, истина, практика. Сознание существует как субъективная реальность, как идеальное, оно проявляет себя как отношение к действительности, но в то же время - оно есть реальное дело, к...
6592. Наука и ее роль в жизни общества. Функции, особенности и методы научного познания 29.91 KB
  Наука и ее роль в жизни общества Функции, особенности и методы научного познания. Стадии и уровни научного познания. НТР и моральные проблемы. Наука - это особая сфера человеческой деятельности, направленная на добывание, осмысление, системати...
6593. Человек и общество. Общество как процесс. Человек и история. 36.58 KB
  Человек и общество. Общество как система. Общество как процесс. Человек и история. Общество - система деятельности и жизни людей, объединенных территорией проживания, эпохой, историей, традициями и культурой. Основное предназначение обще...