You decide on how the arrow should look like, and write a function that calculates the char array of blanks and stars for each line individually, depending on the line number.
Obviously you need to distinguish the individual parts, i. e. the head and the tail, so you'd better use two separate functions for that.
What's more, it might help to write separate functions that do nothing but decide whether you need to draw a point at a given line and column or not. that will greatly simplify the line drawing functions and improve readability.
The functions should look like this:
bool is_pyramid_point(int line, int column, int pyramid_width)
void generate_head_line (int line_number, int head_width, char point_val, char* line_buffer)
bool is_tail_point(int column, int center_position, int tail_width)
void generate_tail_line (int center_position, int tail_width, char point_val, char* line_buffer)
I've chosen self-explanatory variable names, so you should be able to understand what each function does, and how it should be implemented.