In general, the moderators close "best" or "better" questions because answers will be primarily opinions. Please revise your question, sooner than later.
No: Is it better to X or Y?
Everyone is right.
Yes: Given identical inputs, which is faster, X or Y?
One of the two is faster regardless of how anyone feels about it.
I have no experience with SDL2, however, this site contains a number of examples that make sense to me. It appears that you are free to maintain global pointers, if desired:
//The window we'll be rendering to
SDL_Window* gWindow = NULL;
//The surface contained by the window
SDL_Surface* gScreenSurface = NULL;
//The image we will load and show on the screen
SDL_Surface* gHelloWorld = NULL;
Both approaches to character sprites are likely to have advantages over the other in certain circumstances. You should always try to avoid iterating over large collections of CPU data, uploading and drawing it one object at a time. That being said, do things the easiest way possible. If circumstances require an atlas, you're going to use an atlas; otherwise, just keep it simple and iterate. If both ways are about equal, go with the one you know best.
As a beginner, give yourself some leeway and just focus on completely understanding topics and techniques, rather than trying to produce the "best" code possible. Otherwise, you'll get stuck in feature creep and/or continue solving problems you haven't even had yet. 60FPS is acceptable and attainable, even with disorganized and inefficient code.