结构体中字符型数组为什么用strcmp时与预期结果不符?

typedef struct person{
char name[32];
char sex;
char age;
char num[16];
char addr[128];
} people_t, *people_p, **people_pp;

int main()
{

people_t x;
char tmp[20] = "zhangsan";
people_p c = &x;
*(c->name)  = "zhangsan";
int z = strcmp(tmp, c->name);
printf("%s\n%d\n", c->name, z);
system("pause");
return 0;
}

1.代码是这样,为什么两个都是“zhangsan”,但是用strcmp比较出来的值为-1,明显与预期结果不符,
不知道哪出错了?
2.还有*(c->name)  = "zhangsan";这行代码对吗?如果不能这样写,那要怎么写?

**

 *(c->name)  = "zhangsan";

**
改为

 strcpy(c->name,"zhangsan");

指针声明和数组声明(例如 char *a 和 char a[] )具体都有哪些区别