string
является указателем на char
. string2
- это массив из char
элементов. Эти два являются разными типами.
В вашем втором примере вы пытаетесь назначить указатель на массив (строковые литералы оцениваются указателями). Это не имеет смысла и не представляется возможным. Это на самом деле не отличается от:
int numbers[2];
int num;
numbers = # // How's that supposed to work?
Люди получают немного смущены этим, потому что вы можете использовать оператор индекса []
на указатели, а имя массива вычисляется в указатель на его первый элемент. Это не означает, что указатели представляют собой массивы или наоборот. Это просто синтаксический сахар, чтобы облегчить доступ к указанным или содержащимся данным.
Массив * не * совпадает с указателем. Никогда не было. Это было рассмотрено в Stack Overflow больше времени, чем я могу считать (целочисленное переполнение). – dmckee
[В C FAQ есть хорошая страница ответа.] (Http://c-faq.com/aryptr/) – nes1983