Студопедия

КАТЕГОРИИ:

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


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




 

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

 

int getSum(int* numbers, int size) {

int result = 0;

for (int i=0; i<size; i++) {

result += numbers[i];

}

return result;

}

 

int myNumbers[] = {1,2,3,4,5,6,7,8};

printf("%d\n", getSum(myNumbers, 8));

 

36.

 

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

 

int vowels(char* word) {

int result = 0;

for (int i=0; i<strlen(word); i++) {

if (isVowel(word[i])) {

result++;

}

}

return result;

}

 

Динамическое распределение памяти

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

Данную проблему можно решить путем выделения памяти с запасом. Например, зная, что длина слов, с которыми предстоит работа, не превышает 10, то выделить память нужно под них, а по факту использовать меньше.

 

int* ptr;

int size;

printf("Введите размер: ");

scanf("%d",&size);

ptr = new int[size];

 

for (int i=0; i<size; i++) {

*(ptr+i) = rand();

}

 

for (int i=0; i<size; i++) {

printf("%-7d\n", ptr[i]);

}

 

 

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 49; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты