Initialization nested struct in C
From C99 onwards, C has support for what the standard calls 'compound literals'. 

You use them like this:

settings[0].par1 = (struct PARAM) {0x01,{0x01,0x01},{0x05,0x06}};


You can in fact fill the entire settings[0] structure at once:

settings[0] = (struct CONFIG) {
    0x01,
    {0x01, {0x01, 0x01}, {0x05, 0x06}},
    {0x01, {0x01, 0x01}, {0x05, 0x06}}
};


You can also specify the fields by name, for increased readability:

settings[0] = (struct CONFIG) {
    .data4 = 0x01,
    .par1 = {
        .data1 = 0x01,
        .data2 = { 0x01, 0x01 },
        .data3 = { 0x05, 0x06 }
    },
    .par2 = {
        .data1 = 0x01,
        .data2 = { 0x01, 0x01 },
        .data3 = { 0x05, 0x06 }
    }
};


Compound literals can be used in other places too, such as in function calls.

fun((struct PARAM) {0x01,{0x01,0x01},{0x05,0x06}});


In an initialization, you can also initialize the entire settings array at once:

struct CONFIG settings[] = {
    {
        .data4 = 0x01,
        .par1 = {
            .data1 = 0x01,
            .data2 = { 0x01, 0x01 },
            .data3 = { 0x05, 0x06 }
        },
        .par2 = {
            .data1 = 0x01,
            .data2 = { 0x01, 0x01 },
            .data3 = { 0x05, 0x06 }
        }
    },
    /* The rest of the elements go here. */
};