МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||
Приклад/* strlen: повертає довжину рядка */ int strlen(char *s) { int n; for (n = 0; *s != '\0'; s++) n++; return n; } Оскільки змінна s - покажчик, до неї застосовна операція ++; s++ не робить ніякого впливу на рядок символів функції, яка звернулася до strlen. Просто збільшується на 1 деяка копія вказівника. Це значить, що всі виклики, такі як: strlen("привіт"); /* рядкова константа */ strlen(array); /* char array[100]; */ Приклад . Перший варіант strcpy, з використанням масиву, має наступний вигляд: /* strcpy: копіює t в s; варіант з массивом*, що індексується/ void strcpy(char *s, char *t) { int i; i = 0; while ((s[i]= t[i]) != '\0') i++; } Для порівняння приведемо версію strcpy з вазівниками: /* strcpy: копіює t в s: версія 1 (з покажчиками) */ void strcpy(char *s, char *t) { while ((*s = *t) != '\0') { s++; t++; } } Оскільки передаються лише копії значень аргументів, strcpy може вільно користуватися параметрами s і t як своїми локальними змінними. Вони належним чином були ініціалізовані вказівниками, які перходять кожного разу на наступний символ в кожному з масивів до тих пір, поки в копійованому рядку t не зустрінеться '\0'. На практиці strcpy так не пишуть. Досвідчений програміст віддасть перевагу більш короткому запису: /* strcpy: копіює t в s; версія 2 (з вказівниками) */ void strcpy(char *s, char *t) { while ((*s++ = *t++) != '\0') ; } Приріст s і t тут здійснюється в керуючій частині циклу. Значенням *t++ є символ, на який вказує змінна t, перед тим, як її значення буде збільшено; постфіксний оператор ++ не змінює вказівник t, поки не буде взятий символ на який вказівник вказує. Що стосується функції strcpy із стандартної бібліотеки <string.h> то вона повертає як свій результат ще й вказівник на нову копію рядка. Приклад .Розглянемо функцію strcmp(s,t). Вона порівнює символи рядків s і t і повертає від’ємне, нульове або додатнє значення, якщо рядок s відповідно менший, рівний або більший за рядок t. Результат отримаєм за допомогою відніманням перших неспівпадаючих символів з s і t. /* strcmp: видає < 0 при s < t, 0 при s == t > 0 при s > t */ int strcmp(char *s, char *t) { int i; for (i = 0; s[i]== t[i]; i++) if (s[i]== '\0') return 0; return s[i] - t[i]; } Та ж програма з використанням вказівників виглядає так:
/* strcmp: видає < 0 при s < t, 0 при s == t > 0 при s > t */ int strcmp(char *s, char *t) { for ( ; *s == *t; s++, t++) if (*s == '\0') return 0; return *s - *t; } Тема. Визначення функції. Оголошення функцій користувача. Рекурсія. План 1. Визначення функції.Оголошення функцій користувача. 2. Формальні та фактичні параметри. 3. Рекурсія.
Читайте також:
|
||||||||
|