In the past few years, developers have created several methods that cleverly use available IP address space. For example, Classless Inter-Domain Routing (CIDR) aggregates IP addresses, decreases the size of routing tables, and lets you assign a network a sub-Class C address or a portion of a Class C address. Most ISPs and address registrars use this capability, which lets several small networks share one Class C address.
Network Address Translation (NAT) and Port Address Translation (PAT) are two other schemes that many routers support, although these solutions aren't yet in widespread use. NAT and PAT extend the life of the IP address space by hiding internal addresses from addresses advertised on and accessible from the Internet.
IP version 6 (IPv6) isn't a method that cleverly uses available IP address space, but IPv6 sidesteps the address-exhaustion problem by employing 128-bit addresses. Supposedly, IPv6 provides enough address space to assign an address to every molecule in the solar system. For more information about IPv6, see Tao Zhou's "The Next Generation IP in Action," June 1998.