>>56
gccにアセンブラ出力させてtmp = ary[i];のところを見てみたら
  movl  $7, %eax
  movl  %edx, %edi
  movl  %ebx, %esi
  movl  %eax, %ecx
  rep movsl
となっていました。ecxの7は7*4=28バイトで丁度構造体配列のひとつ分なので構造体を丸ごと入れ替えてます。

なので、構造体配列はポインタ(アドレス)の配列を使わずにそのままメンバをメモリ上に並べています。
構造体はポインタ配列などと書いてすみませんでした。