定义一个结构体类型s[MaxSiZe]的有关问题

定义一个结构体类型s[MaxSiZe]的问题
#define MaxSize 10
typedef struct 
{
  int i;
  int j;
  int di;  
}S[MaxSize];
int main()
{
  printf("%d\n",sizeof(S[MaxSize]));
}

这里定义了一个数据类型s[MaxSize],我试了一下:
当定义MaxSize等于1时 输出12
当定义MaxSize等于10时 输出1200
当定义MaxSize等于100时 输出120000

现请教各位高手:
1. 该数据类型(S[MaxSize])在计算机里存储空间是怎么分配的?
2. 怎样给该数据类型中的变量赋值和调用该数据类型中的变量?

谢谢赐教

------解决方案--------------------
这里要先弄清楚S是什么?S是一个结构体数组,数组有MaxSize个结构体,每个结构体中有3个int型变量
分析好S后,我们来看S在内存中是怎么分配的,由于没有编译指令的作用,编译器自动按照对齐方式,给
这个结构体分配了12个字节(3*sizeof(int)),所以S占用了12*MaxSize个字节

对于结构体变量占用内存的大小,这是要根据编译指令,有时候甚至在不同的CPU下占用的字节都是不同的
在这里
当定义MaxSize等于1时 输出12 
当定义MaxSize等于10时 输出1200 
当定义MaxSize等于100时 输出120000 

对数据变量赋值和调用就和普通变量一样,

在MaxSize = 2时
S tmp = {{1,1,1},{1,1,1}};
------解决方案--------------------
还是看代码吧
C/C++ code
#include <iostream>
using namespace std;

#define MaxSize 10

struct    //没有typedef的才是定义变量
{
    int i;   
    int j;   
    int di;  
}S[MaxSize];    //此处定义十个结构体变量

int main()
{
    printf("%d\n", sizeof(S[MaxSize]));  //此处结果为12,因为实际上测试的是一个数组元素S[10],当然,这个元素实际上也是非法的,越界了
    printf("%d\n", sizeof(S));    //这里的结果为120,因为是十个结构体的变量,每个12,十个自然是120,把MaxSize改成100,这里就是1200了
        
    return 0;
}

------解决方案--------------------
printf("%d\n",sizeof(S[MaxSize]));//这样写是越界的,应该这样学 printf("%d\n",sizeof(S));
------解决方案--------------------
printf("%d\n",sizeof(S[MaxSize]));//这样写是非法的,应该这样学 printf("%d\n",sizeof(S));