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

}


 

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

29491. СОЦИАЛЬНЫЕ ТИПЫ ПЕРЕХОДНОГО ПЕРИОДА: ПОПЫТКА ХАРАКТЕРИСТИКИ 103 KB
  Представляется общепризнанным что каждая социальная система в каждый значимый период ее существования формирует выдвигает некоторый специфический набор социальноантропологических типов. В условиях модернизационных процессов индустриализация НТР урбанизация образовательная революция в число значимых признаков социальноантропологических типов естественно попадают такие объективные индикаторы как род занятий тип расселения уровень образования и т д. Данные такого рода пригодны для описания внешних условий деятельности различных...
29492. МАССОВЫЙ ПРОТЕСТ: ПОТЕНЦИАЛ И ПРЕДЕЛЫ 95 KB
  Прежде всего это относится к характеру массовых выступлений протеста развернувшихся со второй половины 1996 г. и увенчавшихся пока организованной профсоюзным руководством акцией протеста 27 марта 1997 г. Кто заявляет о готовности протестовать Обратимся к показателям возможного декларативного участия в акциях протеста различных групп. Если как отмечалось ранее центральными фигурами в ожиданиях или опасениях протеста являются образованные люди то главный носитель настроений протеста малообразованные.
29494. ОБЩЕСТВЕННОЕ МНЕНИЕ НА ПЕРЕЛОМЕ ЭПОХ: ОЖИДАНИЯ, ОПАСЕНИЯ, РАМКИ (К социологии политического перехода) 147.5 KB
  Сама сложность такого перехода давно может считаться некой отечественной традицией: персонализация верховной власти при неразвитости формальных политических институтов в России неизменно в течении нескольких столетий приводила к тому что смена первых лиц означала смену политических эпох стилей и механизмов господства состава и роли определенных групп влияния и т. Очевидно при этом что соблюдение конституционных рамок и видимая бесконфликтность даже фактическое отсутствие конкуренции обеспечены смещением решающих политических и...
29495. Элита и «масса» в общественном мнении: проблема социальной элиты 76 KB
  Принято выделять элиты по их профессиональному месту по роду их занятий в обществе и соответственно говорить об интеллектуальных политических военных экономических культурных и т. Эта категория элиты действует преимущественно через системы и средства массовой информации. Поэтому кстати численность публичной элиты ограничена немногими десятками лиц это определяется возможностями самого поля массового внимания или фигурально выражаясь размерами подиума.
29496. КОМПЛЕКСЫ ОБЩЕСТВЕННОГО МНЕНИЯ (Статистика и социология в изучении общественного мнения) 174 KB
  При таком статистическом подходе существуют проблемы измерения общественного мнения но нет вопроса о его структуре и функциях2. но и так сказать изнутри в смысле самого языка общественного мнения символы стереотипы комплексы значений и средств выражения. Понятно что отечественный опыт последних лет питает сомнения и разочарования в отношении эффективности любых демократических институтов в том числе и общественного мнения в нынешнем российском обществе.
29497. ЧЕЛОВЕК, ТОЛПА И МАССА В ОБЩЕСТВЕННОМ МНЕНИИ 104.5 KB
  В частности это относится к пугающему одних и ободряющему других в зависимости от позиции представлению о всемогуществе масскоммуникативного влияния на массовую аудиторию на массового человека. В конечном счете это приводит к одной из граней извечной проблемы общественного человека: как и насколько может и желает человек поддаваться давлению коммуникативных средств массового поражения. О генезисе массового общества С.
29498. ВОЗВРАЩАЯСЬ К ПРОБЛЕМЕ СОЦИАЛЬНОЙ ЭЛИТЫ 141.5 KB
  Но каждое время то есть каждая социальная ситуация выбирает поддерживает пестует продвигает подходящий для нее тип человека. Если на поверхности советской системы находился человек послушнокарьерный то с ее распадом на переднем плане в политической жизни бизнесе медиа социальнонаучной сфере и около них оказался человек ловкий ориентированный на ближайший успех и не связанный ни ценностными ни социальногрупповыми рамками ответственности. Массовый человек ориентируется практически не на те звездные образцы политкумиров...
29499. «СРЕДНИЙ ЧЕЛОВЕК»: ФИКЦИЯ ИЛИ РЕАЛЬНОСТЬ 102 KB
  В соответствии с такой исследовательской ориентацией предметом рассмотрения прежде всего становится человек как респондент массового исследования а лишь затем возникает проблема социальногрупповой типологии. в рамках исследовательской программы Советский человек. Средний показатель I высшая 1 1 1 1 1 1 1 II 1 1 1 1 1 1 1 III 3 4 3 2 3 3 3 IV 6 5 6 4 7 6 5 V 21 20 24 21 19 19 20 VI 17 11 15 14 13 13 12 VII 18 13 14 16 16 15 15 VIII 12 16 15 15 16 18 15 IX 9 11 10 10 10 10 9 X низшая 8 17 13 16 15 14 14 Средний статус 626 697 675...