There is no such thing as "passing the function itself". A function is just a block of code that exists at some specific location (address) in memory. So in essense when you see a direct function call just think of it as an operation performed on a const (ie: unchangeable) function pointer.