あなたの求める「代入」かというとちょっと???ですが(そもそも初期化と代入はちょっと違う気がするけど)、Cだったらこんなお茶目さんも。
C
1#include <string.h>
2#include <stdio.h>
3
4struct Container {
5 float blocks[4][4];
6} ;
7
8int main(void){
9 float blocks[4][4];
10 memcpy(
11 blocks,
12 (float[][4]){
13 { 1,3,5,1 },
14 { 4,4,7,2 },
15 { 4,2,7,3 },
16 { 1,6,8,8 }
17 },
18 sizeof(blocks)
19 );
20 for(int i=0;i<4;i++){
21 for(int j=0;j<4;j++){
22 printf("%4.1f",blocks[i][j]);
23 }
24 printf("\n");
25 }
26 printf("\n");
27
28
29 struct Container c1, c2;
30 c1 = (struct Container){{
31 { 1,3,5,1 },
32 { 4,4,7,2 },
33 { 4,2,7,3 },
34 { 1,6,8,8 }
35 }};
36 c2 = c1;
37
38 for(int i=0;i<4;i++){
39 for(int j=0;j<4;j++){
40 printf("%4.1f",c1.blocks[i][j]);
41 }
42 printf("\n");
43 }
44 printf("\n");
45
46 for(int i=0;i<4;i++){
47 for(int j=0;j<4;j++){
48 printf("%4.1f",c2.blocks[i][j]);
49 }
50 printf("\n");
51 }
52
53 return 0;
54}
後半の構造体で包むのはC++でも通っちゃったり。
C++
1#include <cstring>
2#include <cstdio>
3
4 struct Container {
5 float blocks[4][4];
6 } ;
7
8int main(void){
9 Container c1, c2;
10 c1 = {{
11 { 1,3,5,1},
12 { 4,4,7,2 },
13 { 4,2,7,3 },
14 { 1,6,8,8 }
15 }};
16 c2 = c1;
17
18 for(int i=0;i<4;i++){
19 for(int j=0;j<4;j++){
20 printf("%4.1f",c1.blocks[i][j]);
21 }
22 printf("\n");
23 }
24 printf("\n");
25
26 for(int i=0;i<4;i++){
27 for(int j=0;j<4;j++){
28 printf("%4.1f",c2.blocks[i][j]);
29 }
30 printf("\n");
31 }
32 return 0;
33}