I was reading Ivor Horton's Beginning Visual C++ 2008 and many of its CLR examples have this definition for main:

```
int main(array<System::String ^> ^args)

```

I went back, page by page, to the beginning of the book to find the first such instance with an explanation what it really means, but couldn't find one.

Obviously it means the same as the standard `int main(int argc, char *argv[])`, but I'd like to know when and why that `^` is really used, and why it even exists (does it do something that pointers `*` and references `&` cannot represent)?