Задание на работу с указателями
Задание:
- Напишите функции (сумма и разность), выполняющие арифметические операции с двумя числами. На вход - два числа одного типа (int, например), возвращаемое значение аналогично.
- Создайте в main описание указателя на функцию, соотв. созданным функциям
- Вызовите с помощью указателя первую и вторую ф-ии с одинаковыми значениями переменных, выведите результаты
- Выведите значения аргументов, с которыми вызывали ф-ии
- Измените функции, чтобы они принимали адреса переменных. Пусть вторая из функций обменивает значения переменных.
- Вызовите новые ф-ии с теми же значениями. Результаты работы функций не должны отличаться)
- Выведите в конце и переменные, значения дб. изменены
Код:
#include <stdio.h>
#pragma warning(disable:4996)
int sum(int a, int b) {
return a + b;
}
int diff(int a, int b) {
return a - b;
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int (*pf1)(int, int) = sum;
int (*pf2)(int, int) = diff;
int a = 10, b = 20;
int result1 = (*pf1)(a, b);
int result2 = (*pf2)(a, b);
printf("Result 1: %d\n", result1);
printf("Result 2: %d\n", result2);
pf1 = diff;
pf2 = swap;
(*pf1)(&a, &b);
(*pf2)(&a, &b);
printf("a: %d\n", a);
printf("b: %d\n", b);
return 0;
}
Что не так и как исправить?
Ответы (1 шт):
Автор решения: rusgeli
→ Ссылка
Ваши ошибки:
- "Измените функции, чтобы они принимали адреса переменных. Пусть вторая из функций обменивает значения переменных." -- Вы поменяли вызов функции, но не сами функции, отсюда и ошибки.
pf2 = swap-- несостыковка типов,(*pf1)(&a, &b);-- функция принимает интовые значения, а вы ей -- указатели. Соответственно функции из 1 и 5 заданий должны быть разными. - Мне кажется, что в задании имелось в виду не заменить одну из функций на функцию обмена значений, а добавить обмен значений в существующую. Это было бы логичней в контексте задания.
- Вы пропустили 4 и 6 задания.
Итоговая программа должна выглядеть примерно так:
#include <stdio.h>
#pragma warning(disable:4996)
int sum(int a, int b) {
return a + b;
}
int diff(int a, int b) {
return a - b;
}
int sum_modified(int *a, int *b) {
return *a + *b;
}
int diff_modified(int *a, int *b) {
int res = *a - *b;
int temp = *a;
*a = *b;
*b = temp;
return res;
}
int main() {
int (*pf1)(int, int) = sum;
int (*pf2)(int, int) = diff;
int a = 10, b = 20;
int result1 = (*pf1)(a, b);
int result2 = (*pf2)(a, b);
printf("Result 1: %d\n", result1);
printf("Result 2: %d\n", result2);
printf("a: %d\n", a); // Задание 4
printf("b: %d\n\n", b);
int (*pf_mod1)(int *, int *) = sum_modified;
int (*pf_mod2)(int *, int *) = diff_modified;
int result_mod1 = (*pf_mod1)(&a, &b);
int result_mod2 = (*pf_mod2)(&a, &b);
printf("Result 1: %d\n", result_mod1); // Задание 6
printf("Result 2: %d\n", result_mod2);
printf("a: %d\n", a);
printf("b: %d\n", b);
return 0;
}