The simplest way is as you described. Its two independent characters that cant ocuppy the same space. If the space is the same, then collision. Done.
But imagine first that you have layers. Some characters you can walk through, other you cant. It will require arrays. Maybe you want the forefront character to inherit the background color from below or have its spaces ignored for "transparency" effect. And then imagine youre dealing with a non rectacular set of characters that may have its own collision structure, independently of its design layer. For the collision you will need to do a "player structure layer" calculation against a "terrain structure layer", for each ajdecent array position, dependent on player size, shape, direction and speed.
Thats what I did in my engine, in a clumsy way I believe. For example, you can make the player with up to 3x3 characters (for now), but that is blocked at its corners only, passing through blocks that fit into it (moving over those characters that dont block it, with transparency effect). Its customizable shape will fit perfectly in the terrain structure, like tetris. None of this requiere any particulary dificult function, but the whole construct has its own complexity, different from a pixel/graphics approach.
For the code mess i manage to pull off trying this, take a look at my ASCII Terrain Engine, MovePlayer function (I mean, Sub). Ashish helped me with that mess and in the next version this segment will much more clear and compact.