关于指针与数组的疑点

关于指针与数组的疑问
void test(char a[])
{    
    char b[2]={0};
    if(a)
    {
         b[0] = a[0];
         cout << b[0] <<'\t'<< sizeof(a) << endl;
    }
    else
    cout << "NULL" << endl;
}


char t = 'b';
test(&t);//打印出了b,参数a的首地址就是t的地址,但是a所在指向的存储空间却比t的要大
test(NULL)//打印出了NULL,此时是不是把a当成了指针来赋值

sizeof(a)得到的是4,那是不是说明为系统把a当作指针看待了,但是test(&t);时候明显不和char *a = &t等价,a所在指向的存储空间比t的要大,语句char a[] = &t根本就不合法。求解惑
------解决方案--------------------
注意,参数没有数组的说法,都是指针。
------解决方案--------------------
a所在指向的存储空间比t的要大:
这句话压根不成立,你拿一个变量和一个指针有什么好比的呢?

------解决方案--------------------
引用:
Quote: 引用:

注意,参数没有数组的说法,都是指针。
你的意思此时参数a就是个指针,那为何test(&t);时候a所在指向的存储空间比t的要大

注意是空间位置,与大小无关,内存位置由编译器随机分配。如果你sizeof参数a,那它就是sizeof(指针大小) = 4
------解决方案--------------------
引用:
Quote: 引用:

a所在指向的存储空间比t的要大:
这句话压根不成立,你拿一个变量和一个指针有什么好比的呢?
额,你没明白的意思,如果此时a就是单纯的指针变量,那我传递给t的地址给a的时候,a就该指向存储t变量的那个存储区域,但是现在是a指向的那块区域被扩大了

就因为sizeof(a)=4,你就说是被扩大了?
------解决方案--------------------
a仅仅是一个指针,他指向的是变量t,这个跟t占多少空间没有关系的
这两个也没有啥可比性啊