I have two arrays globally declared: but it's size needs to be variable, I will receive a message with items but I don't know how many of them so I need to set the size on running time.
This is to avoid declaring[60] if I am going to use [5] only.
In both cases I want to set the value of x. char * itemsA[x];
The multidimensional needs to set only one dimension char * ItemsB[x][6];
You need to reallocate memory, but as my opinion it's better declare the arrays bigger or don't use array if you need something to be dynamic allocated.
What you're looking for is dynamic memory allocation and it comes with pitfalls. You will easily crash your application if you don't pay attention; you'll have to clean up the mess after you have used it. And I wonder what real benefit you see; if you need 60, you need 60 and you might still run out of memory.
Will you be using the same x value for both arrays at the same time? If so, I do not see any advantage in declaring the smaller arrays, because you still need sufficient memory for both arrays to be the maximum size simultaneously. Just declare the arrays for the maximum size, and only use the number of elements needed, ignoring the excess.
Why bother? If there will sometimes be 60, you will need to have enough memory for 60... It's not like some other "user" will be able to use the memory instead...