Well I get confused with functions that return pointers, and pointers to functions. Not sure if thats advanced. I also get confused with when to use the * operator. I know basic pointers like

int *ptr;
int a = 100;
ptr = &a;

printf("A integer %d", *a);

But also character arrays confuse me.

char *array = "Hello World";
sprintf("a string %s", array);

Part that confuses me is why array gives me the string, and why with an int pointer *ptr gives me the integer.

But then pointers to pointers realy get me. Like a data structure the contains a pointer to another structure.