КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Передача массивов в качестве аргументов функций
Поскольку элементы массива хранятся в памяти последовательно, что для обращения к массиву достаточно знать указатель на его первый элемент и тип. Таким образом, прототип функции, принимающей массив в качестве аргумента имеет вид:
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]); }
|