char str[四]; str = "abc" error

char str[4]; str = "abc"; error
char str[] = "abc";

char *str = "abc";
都是对的,但是下面这样声明——
char str[4]; 
str = "abc";
编译器为什么就会报错?error:incompatible types when assigning to type 'char[4]' from type 'char*'.
难道是因为“字符串常量指针不能赋值给数组指针”?
(因为 char *p; p = "abc"就可以,所以我才觉得“字符串常量指针可以赋值给指针变量,但是不能给数组指针”,可是原因是什么呢?求指点...char str[四];  str = "abc" error

------解决思路----------------------
数组都不可以直接用 = 来赋值,除非是初始化
------解决思路----------------------
另外 答题 
数组可以通过类型转换 转换为指针
指针不能通过类型转换 转换为数组
完毕
------解决思路----------------------
引用
Except when it is the operand of the sizeof operator or the unary & operator, or is a
string literal used to initialize an array, an expression that has type ‘‘array of type’’ is
converted to an expression with type ‘‘pointer to type’’ that points to the initial element of
the array object and is not an lvalue
. If the array object has register storage class, the
behavior is undefined.


引用
An assignment operator shall have a modifiable lvalue as its left operand.


str ="abc";
右边表达式"abc"类型是char [4], 转换为char *;  左边表达式str的类型char [4], 也会转换为char*, 但是不是一个左值, 不满足第二条。 
------解决思路----------------------
错了 <string.h>