char *ptr = &"Hello";
Your compiler should have warned you about this. "Hello" is of type char[6] (the length of the string plus 1 for the terminating '\0' null character). So &"Hello" is of type char (*)[6], or pointer to array of 6 chars. There is no implicit conversion from that type to char*.
If you want a pointer to the string, drop the &:
const char *ptr = "Hello";
This takes advantage of the rule that an expression of array type (such as "Hello" is implicitly converted to a pointer to the array's first element. (This conversion isn't done if the array is the operand of a unary & or sizeof operator, or is a string literal used to initialize an array object.)
(I've added the const because it's safer; you can't legally modify the contents of a string literal, and the const reminds the compiler not to let you try. Thanks to Bathsheba for reminding me.) (Actually modifying the contents has undefined behavior. Long story.)
You'll note that ptr points to the first character of the string, not to the entire string. That's (probably) exactly what you want. In C, an array is usually manipulated via a pointer to its elements, not via a pointer to the entire array. Pointer arithmetic is used to traverse the array and access all its elements.
It's important to keep in mind that constructing a pointer to an array's initial element does not remember the array's size. You have to keep track of that yourself. If the array contains a string, you'll generally look for the terminating '\0', or use a function that does so. For other arrays, it's common to store the length separately. For example a function might take two arguments, the address of an array's initial element and an integer (size_t) holding the number of elements.
Suggested reading: Section 6 of the comp.lang.c FAQ.