If my computer is a 32 bit system,it has a 32 bit address right?But when i print any memory address in C why do i get a short value?
If my computer is a 32 bit system, it has a 32 bit address right?


You should not take it for granted.

Many older processors had external (or internal) buses narrower than 32 bits (thus limiting memory size or demanding more cycles for instruction fetch) but were labeled 32-bit based on the fact that they had 32-bit registers and instructions able to manipulate 32-bit quantities.

Some examples are Motorola 68000 and IBM System/370.

Also a 32 bit system, for backward compatibility, may use a non linear address space (e.g. Intel 80386 fully support the 16-bit segmented address space of its predecessors).

Conversely processors with 32-bit registers and instructions that manipulate 32-bit quantities may have bigger external address bus (e.g. Pentium Pro with 36 bits and a larger address space than 4 GB).

Anyway the correct explanation (educated guess) is in the comments (further details in https://stackoverflow.com/q/5208641/3235496).