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);
}
А также другие работы, которые могут Вас заинтересовать | |||
40891. | Хвильовий опір хвильовода | 164 KB | |
Рівняння для Т, ТЕ, ТМ хвиль різні. Щоб звести їх до одного виду, використовуючи потенціали , , де - електрична скалярна функція, - магнітна скалярна функція. Якщо для Т – хвилі завжди, то , а перетворюється в нуль завдяки . | |||
40892. | Коаксіальна лінія | 412.5 KB | |
Таким чином, можна перетворити межу циліндричної області в межу плоскої. Тому й область перетворюється в область . Розв’язок задачі в плоскому конденсаторі:має вигляд: . Поклавши (скориставшись тим, що потенціал визначається з точністю до константи), маємо: . Скориставшись зворотнім перетворенням, одержимо: | |||
40893. | Лінії передач для інтегральних схем | 207 KB | |
Складність розв’язання цієї задачі полягає в тому, що граничні умови тут – нерегулярні; не можна покласти, що на поверхні. Використовують наближені методи; зокрема конформних відображень. | |||
40894. | Реальний смушковий несиметричний хвильовід | 149.5 KB | |
У попередній задачі ми нехтували всіма розмірами – розглядали ідеальний випадок. Тепер розглянемо реальний: скористаємося тими самими моделями: нехай розповсюджується Т – хвиля, а ми розглядаємо одну половину (симетрія). | |||
40895. | ФОРМИ БЕЗПОСЕРЕДНЬОЇ ДЕМОКРАТІЇ В УКРАЇНІ | 199.5 KB | |
Поняття і види форм безпосереднього народовладдя в Україні Вибори в Україні Референдуми в Україні Поняття і види форм безпосереднього народовладдя в Україні Чинна Конституція України визнала вперше не лише належність влади народу тобто володіння політичною владою як його природне право мати владу але і його право здійснювати владу. 5 Конституції України зазначається що право визначати і змінювати конституційний лад в Україні належить виключно народові і воно не може бути узурповане... | |||
40896. | Симетричний смушковий хвильовід | 51 KB | |
Тут менше аніж у попередній лінії оскільки ємність тут більша. Однак тут менше не в 2 рази оскільки у попередньому хвильоводі ємність враховувалась і до верхньої сторони верхньої смужки і до нижньої див. тому там ємність більша аніж у звичайному конденсаторі. | |||
40897. | Повільні хвилі | 183.5 KB | |
Непрямолінійний розповсюджувач меандр спіраль Для багатьох електричних приладів необхідно отримати хвилю, що рухається зі швидкістю . Це зокрема стосується приладів, у яких відбувається передача енергії та інформації від хвилі іншим носіям. | |||
40898. | Гібридні хвилі | 91 KB | |
У випадку розглянутому вище, хвильовода (стержня), ми маємо три граничні умови і дві константи в рівняннях, а тому рівняння в загальному випадку не буде мати розв’язків. Однак, тут нам потрібно розглядати не тільки, а і хвилю : Тепер поле описується чотирма константами і відповідно чотирма граничними умовами. | |||
40899. | Об’ємні резонатори | 117.5 KB | |
З урахуванням граничних умов на бокових стінках (стінках хвильовода): Накладемо ще дві граничні умови: звідки одержимо - неправильно. Це тому, що не врахували відбиття від торців; правильно буде записати: | |||