使用const將其宣告物件為唯讀(內容有疑問須查詢)

目前嘗試用const來限制更改所宣告的內容,當用const去宣告時(int,char等等皆可),要"直接"更改內容編譯器是不允許的(唯讀空間),例如:
const char a[ ]="hey";
a[0]='H';
在進行編譯時邊議會失敗以及出現唯讀信息,不過我嘗試著利用指標
來進行修改時卻可以將唯讀空間內容作更改,這現象還需要去找資料確認。
以下為練習範例:
#include<stdio.h>
int main(){
const char strA[]="hey guys";
// strA[0]='H';//編譯器會告知為唯讀
printf("%s\n",strA);

char* A=strA;
A[0]='H';
A[1]='A';
A[2]=' ';
printf("%s\n",strA);
//      這一段編譯器是通過的,而且還可以修改其內容!!!

const int f[3]={52,26,18};
int *g=f;
// f[0]=62;//(X)編譯器會告知為唯讀
g[2]=99;//(?)編譯器不會告知為唯讀,且可改
while(g!=f+3){
printf("%d ",*g);
g++;
}
printf("\n");

const int kk=15;
int* kkk=&kk;
*kkk=29;
printf("KKK=%d",kk);
return 0;
}
//    到底是怎麼回事還需要去查查確認一下。

留言