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: 
`favFood` doesn't hold a string. It points somewhere. And one can make it point to a character that is the first one *in* a string. By convention, since the c strings can have different length, they are terminated with a `'\0'` character. That way, even if all you have is a pointer to the first character, you can find the end of the string.

So a library function like `strlen` will use the pointer to go from the first character to each subsequent one, until it finds the NUL character.

`const char *favFood[20];` is a completely different beast. It's an array of 20 pointers. Each pointer can point to something different.
`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