Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Связь указателей и массивов






Указатели и массивы в языке С тесно связаны между собой. Имя массива является указателем на его первый элемент, т.е. для массива

int p[10],

p

p[0]

имеют одинаковые значения, т.к. адрес первого (с индексом 0) элемента массива это адрес начала последовательно расположенных элементов массива. Рассмотрим обращение к элементам массива на примере. Пусть объявлены - массив из 100 бъектов типа float и указатель на объект типа float:

float p[100];

float *q;

int i;

если выполнить операцию q=p;

то обращения к элементу массива p: p[i] *(q+i) и *(p+i) эквивалентны.

Таким образом, для любых указателей можно использовать две эквивалентные формы выражений для доступа к элементам массива: q[i] и *(q+i). Первая форма удобнее для читаемости текста, но вторая обычно эффективнее по быстродействию программы.

Очевидна эквивалентность выражений

& q[0] < -> & (*q) < -> q // адрес нулевого элемента массива

*q < -> q[0] // значение нулевого элемента массива

 

Для определения размера памяти, необходимого для размещения объектов в языке С используется унарная операция:

int sizeof (параметр);

параметр – тип объекта или его идентификатор (только не имя функции). Операция sizeof возвращает размер памяти в байтах, отводимый под объект.

Если указан идентификатор сложного объекта (массив, структура, объединение), то результатом является размер всего сложного объекта.

Например:

sizeof(int) результат 2 байта,

int b[5]; sizeof(b) результат 10 байт;

int c[3][4]; sizeof(c) результат 24 байта.

Нарпимер:

char *m[]={" Winter", " Spring", " Summer", " Automn" };

k=sizeof(m)/sizeof(*m);

printf(" \n Количество строк = %d", k);

 

Пример 1: Упорядочить по алфавиту массив строк (не более 20) длиной не более 10 символов в каждой:

#include< conio.h>

#include< stdio.h>

#include< string.h>

void main()

{

char s[20][10], r[10];

int i, j, n;

clrscr();

puts(" Веди количество слов \n";

scanf(“%d”, & n);

for(i=0; i< n; i++)

scanf(" %s", & s[i]);

for(i=0; i< (n-1); i++)

for(j=(i+1); j< n; j++)

if(strcmp(s[i], s[j])> 0)

{

strcpy(r, s[i]);

strcpy(s[i], s[j]);

strcpy(s[j], r);

}

for(i=0; i< n; i++)

printf(" \n %s", s[i]);

getch();

}

Пример 2: Проверить, является ли введенная строка полиндромом (справа-налево читается также как и слева-направо).

#include < stdio.h>

#include < string.h>

#include < conio.h>

void main(void)

{

char *s, *s1; // Обьявление строки указателем

int i, k;

clrscr();

puts(" Введите исходную строку");

gets(s);

k=strlen(s);

puts(" РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ\n");

for (i=0; i< k; i++)

printf(" %c", s1[i]=s[k-i-1]); // Переворачиваем строку s

s1[k]=’\0’; // Устанавливаем конец строки

printf(“ %s\n”, strcpy(s1, s)? ” YES - Polindrom! ”: ” NO! ”)

printf(" \n Press any key...");

getch();

}

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.