The most concise and idiomatic ? I would say taking the address of the first element
foo(&x[0]);
UPDATE
Since c++11 there's a standard way of saying the above:
auto a = std::addressof(x[0]); // a will be * to int
adressof
has the following signature
template<class T> T* addressof(T& arg);
and Obtains the actual address of the object or function arg, even in presence of overloaded operator&
Another idea (which also has the advantage of the above) would be to write
auto a = std::begin(x); // a will be * to int
additionally this works with arrays of incomplete types because it requires no application of [0]
UPDATE 2
Since c++ 14 there's even more explicit functionality on this : std::decay