关于C语言构造体数组初始化

关于C语言结构体数组初始化
假设这样一个数组

C/C++ code

    struct st {
       char c[20];
       int i;
       double d;
       long  l;
       char a;
       char *p;
    };
struct st test[100];


有一下初始化方式:
C/C++ code
struct  st  test_st[10]={0};
struct  st  test_st[10]={};
memset( test,0x0,sizeof(test) );


{0}和{}是一样的效果吗?会把结构体中的各种类型的变量赋值为相应的初始值吗?这个规定在哪里可以看到啊?
然后就是前面两者与后面的有什么区别吗?在作用上应该是相同的吧?

细节都不记得了,今天遇到问题了。。。。



------解决方案--------------------
{0}和{} 效果一样,{0}是第一个元素为0,剩下的时候默认值,{}则直接全使用默认值。

但C里面不允许{}这样初始化吧,C++是可以的

------解决方案--------------------
探讨

引用:

{0}和{} 效果一样,{0}是第一个元素为0,剩下的时候默认值,{}则直接全使用默认值。

但C里面不允许{}这样初始化吧,C++是可以的

{0}和{}编译都是通过的,按照你的说法{0}(数组初始化)是把0赋值给了第一个结构体,对于结构体的元素是怎么样的呢?