关于字符数组和指针的一些问题,感激不尽

有这样的定义
char a[10],*b = a;
b = "book";
printf("%s,%s",a,b);

为什么得到的会是
,book
并没有赋值到a呢?b不是保存的a首字符的地址吗?

假如把
b = "book";
改成
strcpy(a,"book");

为什么得到的又是
book,book 呢?

然后就是如果这样定义
int a,*b = a;
*b = 2;
printf("%d,%d”,a,*b);
结果是
2,2

就算把
*b = 2;
改成
a = 2;
结果还是一样的2,2
这个为什么就可以呢?数组不应该跟这个一样吗??

不太能理解他们之间的关系,我想着是既然指针b保存了a数组的首地址,那我通过修改b也能修改a吧?麻烦详细说一下可以吗,感激不尽。

因为b = "book"是改变b的指向,而不是让指向的变量值改变,之后b指向的是这串常量字符串。

b = "book";
这是把b重新指向了book这个字符串常量
你想修改b代表的内存,那要用strcpy函数来操作,而不是直接这样等号赋值