Is the underlying bit representation for an std::array and a T u[N] the same?
In other words, is it safe to copy
This doesn't directly answer your question, but you should simply use std::copy:
T c[N];
std::array cpp;
// from C to C++
std::copy(std::begin(c), std::end(c), std::begin(cpp));
// from C++ to C
std::copy(std::begin(cpp), std::end(cpp), std::begin(c));
If T is a trivially copyable type, this'll compile down to memcpy. If it's not, then this'll do element-wise copy assignment and be correct. Either way, this does the Right Thing and is quite readable. No manual byte arithmetic necessary.