(i) It gives or behaves as High Level Language through Functions - gives a modular programming and breakup, increased efficiency for re-usability
(ii)It gives access to the low level memory through Pointers. Moreover it does support the Low Level programming i.e, Assembly Language.
As its a combination of these two aspects, its neither a High Level nor a Low level language but a Middle Level Language.