Невозможно передать аргумент - C (СИ)
Формулировка задачи:
как передать аргумент в функцию в описании которой переменная с * ?
#include <stdio.h> #define N 100 char arr[N]; int sc_memoryInit(); int sc_memoryGet(int address,int *value); int sc_memorySave(char *filename); int sc_memorySet(int address,int value); int sc_memoryInit() { int i; for (i = 0; i<N;i++); arr[i] = 0; return 0; } int sc_memorySet(int address,int value) { if (address<N) arr[address]=value; else printf("out of memory\n"); return 0; } int sc_memoryGet(int address,int * value) { if (address<N) *value=arr[address]; else printf("out of memory\n"); return 0; } int sc_memorySave(char *filename) { FILE *file1; file1=fopen(filename,"w"); fwrite(arr,sizeof(arr),1,file1); fclose(file1); return 0; } void main(void) { int i, charger=21; char c='file'; sc_memorySet(7 , 3); sc_memoryGet(5,charger); sc_memorySave(c); for (i = 0; i<N; i++) printf("%d", arr[i]); printf("\n %d\n", charger); }
Решение задачи: «Невозможно передать аргумент»
textual
Листинг программы
#include <stdio.h> #define N 100 char arr[N]; int sc_memoryInit(); int sc_memoryGet(int address,int *value); int sc_memorySave(char *filename); int sc_memorySet(int address,int value); int sc_memoryInit() { int i; for (i = 0; i<N;i++); arr[i] = 0; return 0; } int sc_memorySet(int address,int value) { if (address<N) arr[address]=value; else printf("out of memory\n"); return 0; } int sc_memoryGet(int address,int * value) { if (address<N) *value=arr[address]; else printf("out of memory\n"); return 0; } int sc_memorySave(char *filename) { FILE *file1; file1=fopen(filename,"rb"); fwrite(arr,sizeof(arr),1,file1); fclose(file1); return 0; } void main(void) { int i, charger=21; char *c="file.txt"; sc_memorySet(7 , 3); sc_memoryGet(7,&charger); sc_memorySave(c); for (i = 0; i<N; i++) printf("%d", arr[i]); printf("\n %d\n", charger); }
Объяснение кода листинга программы
- Объявлены массив arr размером N и функция sc_memoryInit().
- В функции sc_memoryInit() происходит инициализация массива arr нулями.
- В функции sc_memorySet() можно установить значение arr[address] равным value, но только если address меньше N. Если это условие не выполняется, выводится сообщение
out of memory
и значение не устанавливается. - В функции sc_memoryGet() можно получить значение arr[address] и сохранить его в *value, но только если address меньше N. Если это условие не выполняется, выводится сообщение
out of memory
и функция возвращает значение не равное arr[address]. - В функции sc_memorySave() открывается файл с именем filename, в который записывается массив arr.
- В функции main() объявлены переменные i, charger и c.
- В main() вызываются функции sc_memorySet(), sc_memoryGet(), sc_memorySave() и выполняется цикл, в котором выводятся значения arr[i].
- Вызов функции sc_memorySave(c) должен записать массив arr в файл file.txt, но возможно он не имеет разрешения на запись в файл или файл уже существует и его содержимое перезаписывается.
- Если файл file.txt существует и его содержимое не пусто, то при вызове функции main() в нем будут записаны значения массива arr.
- Если файл file.txt не существует или его содержимое пусто, то при вызове функции main() в нем будет записан массив arr.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д