책을보니깐 이런 대목이 있더군요.
"대부분의 경우에 배열 이름이나 포인터 이름은 주소를 나타낸다. 한가지 차이점이 있다면, 배열 이름은 값을 변경 할 수 없는 상수이고, 포인터는 값을변경할 수 있는 변수 라는 사실이다"
예제)
pointername=pointername+1; //맞다
arrayname=arrayname+1; //틀리다
머 이런 식으로 나왔있더군요. 그런데 이해가 않가는부분이... 배열이름으로도 이미 초기화 시킨 배열에
다른 것을 집어 넣을수 있는거 아닙니까?
예를들어 머 초반에
char alpa[5]="abcd";
이렇게 설정해놓고 그다음에 char[1]='c'; 이런식으로 다시 짚어 넣어도 무방하지않나요?
위에서 말하는 것은 단지 배열 이름만 썻을경우 즉 주소를 의미하는 첨자없는 배열이름만 가지고 말한건지 햇갈리군요 --;
두번째 장소의 값을 바꾸는 것이지 배열의 주소를 바꾸는 것이 아닙니다..
즉, 배열 이름이 값을 변경할 수 없다는 것은 alpha라는 장소의 값인 주소값을 바꿀수 없다는 소리지 그 내용(예의 "abcd")을
바꿀수 없다는 소리가 아닙니다. 배열의 이름은 주소를 가르키는 또다른 형태의 포인터 입니다. 다만 그 주소값을 바꾸지 않도록
만들어진 것이죠. 포인터 또한 주소를 가르키는 것이지만 그 가르키는 주소 값을 바꿀 수 있도록 쓸 수 있다는 겁니다. 그 때문에
포인터는 자체의 연산을 할 수 있지만 배열의 이름값은 연산 할 수 없습니다.
이런것도 가능합니다.
char alpha[5] = "abcd";
char *test = alpha;
alpha[1] = 'c';
test[1] = 'C';