Yup, ncurses is the library you are looking for. As an example, here (n) curses the gotoxy equivalent:
NAME
move, wmove - move cursor cursor
SYNTAX
#include <curses.h> int move(int y, int x); int wmove(WINDOW *win, int y, int x);
DESCRIPTION
These procedures move the cursor associated with the window to row y and column x. This procedure does not move the physical cursor of the terminal until an update is called. The specified position relative to the upper left corner of the window, which is (0,0).
Addendum:
In your comment, you are asking about curses windows - I don't think I can really improve what ncurses man says on this page, so I will simply quote this:
The ncurses library allows the manipulation of data structures called windows, which can be like two-dimensional arrays of characters representing all or part of a CRT screen. The default window called stdscr, which is the size of the terminal screen. others can be created using newwin.
Note that curses are not handled by overlapping windows that pane (3CURSES). This means that you can use stdscr or split the screen into tiled windows and not use stdscr at all. Mixing two unpredictable and undesirable effects.
Windows refers to variables declared as WINDOW *. This data structure manipulates the procedures described here and elsewhere in the ncurses manual pages. Among those, basic procedures are moved and added. More general versions of these routines include names starting with w, allowing the user to specify a window. Procedures not starting with w affect stdscr.
After using the routines to control the window, update, curse to make the user's CRT screen look like stdscr. The characters in the window are indeed of type chtype, (character and attribute data), so other character information can also be stored with each character.
So, in general, you can safely ignore the whole thing of the window and just use the stdscr window.