Я местный программист в Дании, пытающийся помочь другу с его C exsam.Как читать этот код? exsam, подготовка
Ему нужно научиться читать определенные проекты кода, как этот. Однако я не могу сделать головы или хвосты в том, где результаты приходят из ... кто-то пожалуйста, помогите мне понять это, так что я могу помочь ему:
#include <stdio.h>
#include <stdlib.h>
int func1(int);
void func2(int(*fp)(int), int);
void main(){
int (*fp)(int);
fp = func1;
(*fp)(1);
func2(fp,(*fp)(2));
}
int func1(int arg){
printf("Func1 %d\n", arg);
return arg;
}
void func2(int(*fp)(int), int arg){
printf("Func2 %d\n",arg+fp(arg));
}
Я знаю, что Anser является: Func1 1 Func1 2 Func1 2 Func2 4
однако почему это есть! Это путь выше моего платного аккаунта.
Я понимаю, что в void main()
мы распыляем int ... однако этот взгляд выглядит странно.
Затем мы вызываем fp = func1;
, что эффективно работает printf("Func1 %d\n", arg);
текст должен быть «Func 1 (вставка агд здесь). Я не могу понять, почему это дают номер 1.
это то делает что-то здесь (*fp)(1);
meaby какой-то указатель материал ???
я не понимаю, почему он работает printf("Func1 %d\n", arg);
3times подряд и снова, откуда эти цифры берутся?
и остальная часть кода не лучше
Посмотрите на это снова: 'printf (" Func1% d \ n ", arg)'. Что он печатает? –
'int (* fp) (int)' является указателем на функцию, которая принимает int и возвращает int, поэтому сигнатурой функции будет int some_name (int). Во второй строке 'fp = func1' мы присваиваем адрес' func1' 'fp' (обратите внимание, что сигнатура func1 является' int func1 (int) ', которая соответствует указанному выше объявлению. Следующая строка имеет эффект вызова func1 с аргументом 1. Я предлагаю, чтобы вы оба нажимали на указатели на функции и их использование :). – thurizas