Question: Hi sorry I've been stuck on this code for a while and both seem to work I just don't really understand the differences. 

```
struct faveThings{

  const char *favFood; 
  const char *faveFriend;

};

struct dog{

 const char name[20];
 const char breed[20];
 int height;
 int weight;

 struct faveThings dogFaves;

};

```

I can completely understand the dog struct the use of 'char name[20]' makes complete sense to me. But with faveThings I struggle with 'char \*favFood', I get that this is a pointer, but how can this hold a string if its just a char? Should it not be an array of chars?

```
const char *favFood[20];

```

Thanks for any help i've been banging my head against the wall for hours trying to find the difference.

Answer: 
You're right that `const char *favFood;` does point to a single `char`, but it is understood that there will be a block of memory containing consecutive `char`s, and that pointer points to the first one. So the code can use that pointer to access all of the `char`s in the block.

The code that uses `favFood` will also involve performing a memory allocation, filling up that memory with chars (and a null terminator), and seeing `favFood` to point into that allocation.

`const char *favFood[20];` would be an array of 20 pointers.
`const char *favFood[20]` is an array of pointers pointing towards a character data.

It's Like 

```
*favFood[1] -------->MemLocation(0x001) = a
*favFood[2] -------->MemLocation(0x002) = b

```

and so on please take a look here also: [Can I create an Array of Char pointers in C?](https://stackoverflow.com/questions/9352555/can-i-create-an-array-of-char-pointers-in-c)

I hope that answers your question