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

}


 

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

59075. Погода рідного краю. Природознавство 4-й клас 46.5 KB
  Мета: познайомити учнів зі складом атмосфери планети Земля, утворенням хмар, вітру, збагатити уявлення про опади, дати поняття про погоду, указати на значення прогнозу погоди для людини, розвивати спостережливість, уяву, логічне мислення, узагальнювати знання про явища природи...
59076. Урок-телерепортаж із природознавства у 4-му класі. Подорож бутерброда 49 KB
  Обладнання: додатковий теоретичний матеріал таблицямозаїка Органи травлення модель бутерброда картки моніторингу Дерево підсумків. Сьогодні ми познайомимося з органами травлення. Що ж таке травлення Що ви уявляєте коли вимовляєте це слово Які асоціації воно викликає у вас...
59077. Урок математики з використанням інтерактивних методів навчання. Подорож до зимового лісу 30 KB
  Мета: учити додавати двоцифрові числа; розвивати логічне мислення, уміння аналізувати, класифікувати, узагальнювати; виховувати охайність, самостійність, інтерес до математики, дбайливе ставлення до природи.
59078. Виховне заняття 3-5-ті класи. Подорож до країни мультиплікації 41.5 KB
  Мета: привернути увагу дітей до вітчизняних мультфільмів, познайомити з історією мультиплікації, сформувати уявлення про механізм створення анімаційних фільмів, розвивати комунікативні здібності дітей у різних формах ігрової діяльності.
59079. Поняття про офіційно-діловий стиль. План роботи 30.5 KB
  Мета: ознайомити учнів з поняттям офіційноділовий стиль; вчити учнів правильно його відрізняти серед інших стилів мовлення; навчати учнів вмінню складати план роботи; розвивати в учнів мислення та мовлення; виховувати працьовитість уважність.
59080. Права дитини 36 KB
  Хто автор цієї книги Степан Гавриш Про що розповідається в цій книзі В історичному минулому яких країн ми побували Яка історія вразила вас найбільше Чому Які випробування випали на долю хлопчика зі Скіфії Петрика та Оксанки з України...
59081. Права національних меншин 57.5 KB
  Текст Хто такі національні меншини Національні меншини в Україні. Вправа Національні меншини: згоден не згоден. Текст Національні меншини.
59082. Привітаймо наших мам. Святкування Дня Матері 52 KB
  Учень Здрастуй березень наш крилатий Перший місяць весни теплий день. Учень Сьогодні привітати хочемо Ми любих мам із днем весни І побажати щиро хочемо Щоб завжди гарними були Учень Щоб не сивіло в вас волосся І щоб не морщилось чоло Щоб вам кохані наші мами...
59083. Прийом на роботу 32 KB
  Якщо група застрягає можна підказати їй таке: вік зовнішність одяг і походження людини не мають ніякого значення; усі кандидати заповнили заяви для прийому на роботу однаково добре; керівник не був ознайомлений з ними заздалегідь.