求问C语言两种给指针赋值的方法的区别

int a = 1;
int p = (int)calloc(1,sizeof(int));

请问 p=&a; 和*p = a; 有什么区别?
在LeetCode上刷题,我使用 *p = a;就正常;
使用p = &a;就不正常,求大神解答

这要看题目上下文
p初始值是NULL,*p=a 是执行不了的,反而 p = &a 是对的

#include
using namespace std;
int main()
{
int *p = NULL;
int a = 10;
p = &a;
cout << "*p: " << *p << endl;
int *q = new int();
int b = 20;
*q = b;
cout << "*q: " << *q << endl;
system("pause");
return 0;
}
如果是int *q = NULL;然后用*q = b,这样执行不了,因为q是一个空指针,编译器没有给它分配内存,若想赋值,只能赋值int指针,与别人用同一块内存。至于你问的为什么*p = a对,我深表疑惑,你确定没有看错?或者因为环境的不同,导致底层实现不同了?这不应该啊