In most of the system contracts of EOSIO, I found FC_REFLECT function repeatedly used. What does this function actually do? I wonder if any of you can tell the answer for this. Thanks in advance.
FC_REFLECT is not used in contracts/system contracts.
It's used in EOSIO itself (the tools and programs to run a Node), especially in plugins and libraries.
FC_REFLECT is part of reflect.hpp, a collection of typedefs and macros to provide reflection.
Reflection or introspection in programming means that a program knows its own structure and can possibly modify or copy it - and that's what FC_REFLECT is for.