问一个关于数组指针的有关问题

问一个关于数组指针的问题
#include<iostream>
using namespace std;
int main()
{
char (*str1)[4];
char a[2][4]={"abc","bcd"};
str1=a;
str1++;
cout<<*str1<<endl;
return 0;
}


我如果将char (*str1)[4];声明成char (*str1)[];为何就会报错,求问啊!
还有char (*str1)[4]="abc";不能这么声明,为什么啊!,谢谢大家!
指针

------解决方案--------------------
数组的声明是必须要知道数组的大小,所以char (*str1)[]是不行的
char (*str1)[4]是指向数组的指针,而"abc"可以理解为一个数组或者指针,两者类型不一样