c语言里面malloc的问题

代码如下:

   #include<stdio.h>                                                          

void main()
{
int *a = NULL;
int b[10];

       a = malloc(sizeof(int)*10);

      printf("a:%ld\n",sizeof(a));

      printf("b:%ld\n",sizeof(b));

      free(a);

}

出来的结果为什么是
a:8
b:40
求解第一个为什么是8?

你的是64位的操作系统

sizeof(a); a是一个指针,所以计算的是一个指针的大小,不同系统大小不一。32位一般是4,你的应该是64位
sizeof(b); b是数组名,计算的是数组的大小,