I actually am looking at the Apache2 code right now for some obscure reasons. I have 6 years of professional development experience (though very little of that in C).
What I saw was, it took me like 2 weeks of constant battling to make some sense of the code in any way. GDB, inserting random print statement statements, stace and ltrace helped. However what has come out as the most difficult road block for me is: Macros!
I don't get flustered by pointers too much, but Apache2 code uses some demonic macros, resulting in method invocations being redirected to differently named subroutines in other files.
That and the fact that any substantial project takes 10 minutes to recompile for every trivial thing I change are my real pain points.
Having said that, just because I can now read the code does not let me feel confident that I can contribute code to Apache2. That I think will take way more time!!!