Невозможно передать аргумент - 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.