Передача массивов в функцию




Передача массивов в функцию имеет небольшое отличие от передачи простой переменной. В прототипе функции необходимо указывать идентификатор:

intsimple_function (intarray[]);intsimple_function (int array[]) { return 0;}

Обратите внимание, что рядом с идентификатором и в объявлении и в определении стоят скобочки.

При вызове функции, в которую нужно передать массив, указывается только идентификатор массива (без квадратных скобок):

int a[] = { 0, 1, 2 };simple_function(a);

 

 

20. Понятие многомерного массива: форма объявления, расположения в памяти ЭВМ, для чего применяются.

Многомерные массивы в C++ рассматриваются как массивы, элементами которых являются массивы.

Объявление двумерного массива в программе имеет

следующий формат:

тип_данныхназвание_массива[размер_у][размер_х];

Примеры:

int A[10][10]; ­ объявление целочисленного массива

размерностью 10х10 элементов

В памяти компьютера двумерный массив располагается последовательно по строкам. Расположение многомерного массива в памяти можно определить по правилу, что быстрее всего изменяется последний индекс. Для доступа к элементу массива используется специальная операция индексирования. Значения индекса начинаются с 0. Последний индекс равен количество элементов минус один.

многомерные массивы применяются для представления массива массивов

 

21. Понятие динамического выделения памяти, формат функции malloc(), преимущества динамического выделения памяти.

Динамическое выделение памяти – это память которая выделяется и освобождается по мере необходимости

Преимуществом использования динамической памяти служит то, что одна и та же память мо­жет быть использована для хранения различной информации в процессе исполнения программы. Поскольку память выделяется для определенной цели и освобождается, когда ее использование завершилось, то можно использовать ту же самую память в другой момент времени для других целей в другой части программы. Другим преимуществом динамического выделения памяти явля­ется возможность создания с ее помощью связанных списков, двоичных деревьев и других дина­мических структур данных.

Ядром динамического выделения памяти языка С являются функции malloc() и free(), являющиеся частями стандартной библиотеки. Всякий раз, когда функцией malloc() осуществляется запрос на выделение памяти, выделяется порция имеющейся в наличии свободной памяти. Всякий раз, когда эта память освобождается с помощью функции free(), эта память возвращается назад системе.

Функция malloc()

#include <stdlib.h>

void *malloc(size_t size);

Функция malloc() возвращает указатель на первый байт области памяти размера size, которая была выделена из динамически распределяемой области памяти [9.3]. Если для удовлетворения запроса в динамически распределяемой области памяти нет достаточного объема памяти, возвращается нулевой указатель NULL. При этом следует иметь в виду, что попытка использовать нулевой указатель обычно приводит к полному отказу системы. Выделенная область памяти не инициализируетс

 

22. Динамическое выделение памяти под массивы. Преимущества динамического выделения, графическое представление выделения памяти под одномерный массив.

 

Динамическим массивом называют массив с переменным размером, то есть количество элементов может изменяться во время выполнения программы.

Для создания двумерного динамического массива вначале нужно распределить память для массива указателей на одномерные массивы, а затем выделить память для одномерных массивов. При динамическом распределении памяти для массивов следует описать соответствующий указатель, которому будет присвоено значение адреса начала области выделенной памяти.

в памяти выделяется n-элементов указанного типа (n - размерность массива) и создается переменная, являющаяся указателем на нулевой элемент массива (имя массива).

int a [10];


Преимуществом использования динамической памяти служит то, что одна и та же память мо­жет быть использована для хранения различной информации в процессе исполнения программы. Поскольку память выделяется для определенной цели и освобождается, когда ее использование завершилось, то можно использовать ту же самую память в другой момент времени для других целей в другой части программы. Другим преимуществом динамического выделения памяти явля­ется возможность создания с ее помощью связанных списков, двоичных деревьев и других дина­мических структур данных.

23. Графическое представление выделения памяти под двумерный массив. Преимущества динамического выделения памяти.

 

Преимуществом использования динамической памяти служит то, что одна и та же память мо­жет быть использована для хранения различной информации в процессе исполнения программы. Поскольку память выделяется для определенной цели и освобождается, когда ее использование завершилось, то можно использовать ту же самую память в другой момент времени для других целей в другой части программы. Другим преимуществом динамического выделения памяти явля­ется возможность создания с ее помощью связанных списков, двоичных деревьев и других дина­мических структур данных.

 

24. Понятие массива указателей. Графическое представление выделение памяти под двумерный массив со строками различной длины с использованием массива указателей.

Массив указателей (МУ) – простейшая структура данных, в которой проявляется различие между физическим и логическим порядком следования элементов.это массив, каждый элемент которого содержит указатель на переменную (объект).

 

25. Перечислите способы определения строк в программе. Строковая константа.

ВС существуют следующие способы определения строк:

— с помощью строковых констант;

— с помощью массивов символов (типа char);

— с помощью указателей на тип char(массив символьных строк).

 

Строковая константа есть символы, заключенные в кавычки плюс завершающий нуль-символ «\0». Строковая константа обычно вводится с помощью директивы препроцессора #define. Пример: #define MSG “Ох, уж эти программисты!”
Если в строковую константу включается символ “, то ему должен предшествовать символ обратной дробной черты.

Строковая константа является указателем на место в памяти, где записана строка. Это аналогично использованию имени массива, служащего указателем на место массива в памяти.

26. Перечислите способы определения строк в программе. Массив символов

ВС существуют следующие способы определения строк:

— с помощью строковых констант;

— с помощью массивов символов (типа char);

— с помощью указателей на тип char(массив символьных строк).

 

Массив символов - это строка постоянной длины.

 

27. Перечислите способы определения строк в программе. Массивы символьных строк.

ВС существуют следующие способы определения строк:

— с помощью строковых констант;

— с помощью массивов символов (типа char);

— с помощью указателей на тип char(массив символьных строк).

 

Для объявления символьной строки внутри программы просто объявите массив типа char с количеством элементов, достаточным для хранения требуемых символов.

Символьные строки хранят такую информацию, как имена файлов, названия книг, имена служащих и другие символьные сочетания

28. Описание строки через указатель на символьный тип.

Строка – это последовательность символов. Если в выражении встречается

одиночный символ, он должен быть заключен в одинарные кавычки. При

использовании в выражениях строка заключается в двойные кавычки.

Признаком конца строки является нулевой символ ‘\0’. В С\С++ в отличии от

других языков программирования отсутствует тип данных строка, строки в Си

можно описать с помощью массива символов (массив элементов типа char), в

массиве следует предусмотреть место для хранения признака конца строки ('\0').

Например, описание строки из 25 символов должно выглядеть так:

char s[26];

Здесь элемент s[25] предназначен для хранения символа конца строки.

char s[7]="Привет";

Можно описать и массив строк

char m[3][25]={"Пример ", "использования", " строк"}

Определен массив из 3 строк по 25 байт в каждой

 

Строковая константа, написанная в виде

"Я строка"

представляет собой массив символов. Во внутреннем представлении этот массив заканчивается нулевым символом '\0', по которому программа может найти конец строки. Число занятых ячеек памяти на одну больше, чем количество символов, помещенных между двойными кавычками.

Чаще всего строковые константы используются в качестве аргументов функций, как, например, в

printf("Здравствуй, мир\n");

Когда такая символьная строка появляется в программе, доступ к ней осуществляется через символьный указатель; т.е. printf получает указатель на начало массива символов. Точнее, доступ к строковой константе осуществляется через указатель на ее первый элемент.

Строковые константы нужны не только в качестве аргументов функций. Если, например, переменную pmessage объявить как

char *pmessage;

то присваивание

pmessage = "nowisthetime";

поместит в нее указатель на символьный массив, при этом сама строка не копируется, копируется лишь указатель на нее. Операции для работы со строкой как с единым целым в Си не предусмотрены.

Существует важное различие между следующими определениями:

charamessage[] = "now is the time"; /* массив */

char *pmessage = "now is the time"; /* указатель */

amessage — это массив, имеющий такой размер, что в нем как раз помещается указанная последовательность символов и '\0'. Отдельные символы внутри массива могут изменяться, но amessage всегда указывает на одно и то же место памяти. В противоположность ему pmessage есть указатель, инициализированный так, чтобы указывать на строковую константу. Значение указателя можно изменить, и тогда последний будет указывать на что-нибудь другое. Кроме того, если вы попытаетесь изменить содержимое константы, результат будет неопределен.

 

29. Формат функции ввода строк.

Структура (синтаксис) обращения к функции:

scanf("строка формата", список аргументов);

С помощью данной функции производится ввод с клавиатуры значений переменных, перечисленных в списке аргументов в формате, определенном строкой формата (см. 5.2.1). Функция преобразует последовательность вводимых символов в различные формы: целые числа, числа с плавающей точкой, символы и строки C.

 

30. Формат функции вывода строк.

 

Функция scanf() может работать сразу с несколькими переменными. Предположим, что необходимо ввести два целых числа с клавиатуры. Формально для этого можно дважды вызвать функцию scanf(), однако лучше воспользоваться такой конструкцией:

scanf(“ %d, %d ”, &n, &m);

Функция scanf() интерпретирует это так, как будто ожидает, что пользователь введет число, затем – запятую, а затем – второе число. Все происходит так, как будто требуется ввести два целых числа следующим образом:

88,221

или

88, 221

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: