Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
.doc
Скачиваний:
4
Добавлен:
23.09.2019
Размер:
440.83 Кб
Скачать

30) Передача массива в функцию. (в1б30, в3б27)

Передача массива в функцию осуществляется через передачу с помощью указателя адреса первого элемента массива.

Пример. Считать из файла inputfile.dat, имеющего следующую структуру

n

a ... a

где n - размер массива

а - элементы массива

данные в динамический массив.

Вывести данные из массива в файл output.dat.

#include

#include

int* input(int* n, char* fileName){// ввод из файла

//n - размер массива

//fileName - имя файла

// функция возвращает указатель на массив в динамической памяти

int* A;

FILE *fp;

// открытие файла на чтение

if ((fp = fopen(fileName, "r")) == NULL)

{ printf("Нельзя открыть %s\n", "inputfile.dat");

return NULL;

}

// ввод размера массива

fscanf(fp,"%d",n);

//выделение памяти под массив

A=(int*)calloc(*n,sizeof(int));

// ввод значений

for (int i=0;i<*n;i++){

fscanf(fp,"%d",&A[i]);

}

fclose(fp);

return A;

}

void output(int n, int* A, char* fileName){// вывод массива в файл

//n - размер массива

//А - указатель на массив

//fileName - имя файла

FILE *fp;

if ((fp = fopen("outputfile.dat", "w")) == NULL)

{ printf("Нельзя открыть %s\n", "outputfile.dat");

return;

}

// вывод значение матрицы

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

fprintf(fp,"%d ",A[i]);

}

fclose(fp);

}

void main()

{ int *A; //указатель на массив

int n; // кол-во элементов

A=input(&n,"inputfile.dat");

output(n,A,"outputfile.dat");

free(A);// освобождение память для динамического массива

}

31) Классы памяти. Область видимости. (в2б1, в3б28)

Классы памяти:

Существуют два класса памяти: автоматический и статический. Несколько ключевых слов в совокупности с контекстом объявлений объектов специфицируют класс памяти для этих объектов.

Автоматические объекты локальны в блоке, при выходе из него они "исчезают". Объявление, заданное внутри блока, если в нем отсутствует спецификация класса памяти или указан спецификатор auto, создаст автоматический объект. Объект, помеченный в объявлении словом register, является автоматическим и размещается по возможности в регистре машины.

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

помечаются словом static. Объекты, объявляемые вне всех блоков на одном уровне с определениями функций, всегда статические. С помощью ключевого слова static их можно сделать локальными в пределах транслируемой единицы (в этом случае они получают атрибут внутренней связи), и они становятся глобальными для всей программы, если опустить явное указание класса памяти или использовать ключевое слово extern (в этом случае они получают атрибут внешней связи).

Область видимости:

Видимость переменных и функций в программе определяется следующими правилами.

1. Переменная, объявленная или определенная глобально, видима от точки объявления или определения до конца исходного файла. Можно сделать переменную видимой и в других исходных файлах, для чего в этих файлах следует ее объявить с классом памяти extern.

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

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

4. Функции с классом памяти static видимы только в исходном файле, в котором они определены. Всякие другие функции видимы во всей программе.

Метки в функциях видимы на протяжении всей функции.

Имена формальных параметров, объявленные в списке параметров прототипа функции, видимы только от точки объявления параметра до конца объявления функции.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]