So you've got your regular int , which is just a number minding its own business. Then you have int* , which is a pointer—basically an address that says "hey, the actual number is over there." Simple enough. But then someone decided we needed int** , a pointer to a pointer. That's pointing to something that's pointing to something else. Confusing? Sure. But wait, there's more. Enter int*** : a pointer to a pointer to a pointer. At this point you're not even sure what you're pointing at anymore. You're just following breadcrumbs through memory like some kind of deranged treasure hunt, three layers deep into indirection hell. C programmers will tell you this is perfectly normal. They're lying.