请问一些关于结构方面的概念性有关问题

请教一些关于结构方面的概念性问题
本人初学,看到结构一章时有些概念性问题一直弄不清,特来请教,谢谢!
比如我定义了一个结构:
struct     student  
{  
            int           num;  
            char         name[20];  
            char         sex;  
            int           age;  
            float       score;  
            char         addr[30];  
}stu1,stu2;  

    printf(“%o”,&stu1);       //输出结构体变量的首地址  
    1、请问这里的“首地址”是指什么?紧挨着首地址的下一个地址是哪个?
    2、如果在定义结构的同时赋值了,即:
                        stu1={10001, "Liming ", 'M ',18, "HubeiEnshi "};
                        stu2={10002, "Liuhua ", 'M ',20, "HubeiEnshi "};
          而且我同时又定义了指针:
                        struct   strdent   *sp;  
                          sp=&stu1;  
      请问此时指针所指向是哪?如果指针往后移动一个位置又指的是哪?
    如果指针开始指向“10001”,移动一个位置后指的是 "liming "的话,那指针的类型启不是随时都在变?开始是整型,再是字符型……?
如果开始指向的是“10001”,移动一个位置后指向的是“10002”的话,那么
10001
liming
M
18
hubeienshi
      结构体数组在内存中是连续存贮的,这句话又怎么解释?
3、结构体变量在内存占59个字节,是固定的吗?不管成员字符多长,也是59个???
4、scanf(“%d”,&stu1.num);       //输入一个整数送给结构体成员stu1.num  
      printf(“%o”,&stu1);           //输出结构体变量的首地址  
    这两句话,我不明白,同是一个“&”符号,为什么第一个是赋值,第二个是输出地址?



------解决方案--------------------
指针指向第一个共有成员变量
------解决方案--------------------
1、首地址指的是存储结构体的变量的第一个地址,紧挨着首地址的地址是:首地址加结构体的大小,且还要取整
2、指针指向的是stu1的首地址,往后移一个是stu2的首地址,你后面的理解错了
3、结构体应该占的是114个字节,因为你定义的字符串的长度,多余的信息不会被保存
4、你看看操作符的优先级就知道了
------解决方案--------------------
3. 可以用sizeof(stu1)自己看看结构体到底占了多大空间
4. 可以看看scanf的用法,它的第二个参数应该是地址来着,将按照指定格式输入的值送到该地址 处
------解决方案--------------------
结构体的实际空间可能与手工计算有误差,这主要是因为空间对齐的缘故,比如系统按4字节对齐,不足4字节的系统自动添加slice.