Q:

Change the pointer of the array into a much bigger array

So I'm trying to experiment on Artificial Neural Network or at least scratching the surface.  But here's my problem, I can't find a way to increase the array size that contains the pointers of other "neurons". 
Here's my code for extending the size of my artificial neuron. 
void extendNeuron(NeuronPtr *base, NeuronPtr * dest) { 
  (*(*base)->axon[sizeof((*base)->axon) / sizeof(*(*base)->axon) - 1]) = *dest;

  struct Neuron *** newAxon[sizeof((*base)->axon) / sizeof(*(*base)->axon) + 1];

  memcpy(newAxon, (*base)->axon, sizeof((*base)->axon));

  **(*base)->axon = ***newAxon;
}

And here's the struct for my Neurons
struct Neuron{
  char label[100]; 
  struct Neuron **axon[1];
};

Now my idea is to create another array of pointers (struct Neuron **axon) that is bigger than the current array (increase it by 1) and then change the pointer of the axon to that array.  But I don't know how to do it. 
So far here's my code:
  struct Neuron ** newAxon[sizeof((*base)->axon) / sizeof(*(*base)->axon) + 1]; //newAxon is supposed to be bigger than the axon of base 

  memcpy(newAxon, (*base)->axon, sizeof((*base)->axon)); //then I'm trying to copy the axon of base to the newAxon

  **(*base)->axon = ***newAxon; //then change the pointer of axon to newAxon

A:

I will assume the following:

axon will always created through malloc (or one of its derivative)
void extendNeuron(NeuronPtr *base, NeuronPtr * dest) adds dest at the end of the array base->axon
axon array if terminated with a null pointer - because in C you cannot extract the size of an array, so you must either keep its length in an auxiliary variable or use a convention to identifiy last element (or both like argv)
axon is just an array of pointers to Neuron (Neuron **) instead of a Neuron**[1]

You would initialize a new Neuron that way:
void init(Neuron *neuron, const char *label) {
    strncpy(neuron->label, label, sizeof(neuron->label));
    neuron->label[sizeof(neuron->label)-1] = '\0'; /* if label was too long */
    neuron->axon = malloc(sizeof(Neuron *));
    /* control neuron->axon ! = NULL */
    neuron->axon[0] = NULL;
}

You need an auxiliary function to find the length of axon array:
int axon_length(Neuron *neuron) {
    int i = 0;
    while(neuron->axon[i] ! = NULL) i++;
    return i;
}

You can then extend a Neuron that way:
void extendNeuron(NeuronPtr *base, NeuronPtr * dest) {
    int len = axon_length(base);
    Neuron **p = realloc(base->axon, sizeof(Neuron *) * (n+2));
    /* test p ! = NULL ... */
    base->axon = p;
    p[n] = dest;
    p[n+1] = 0;
}

And do not forget to call free(neuron->axon) before releasing a Neuron to avoid memory leaks...

