#include <iostream>
using namespace std;
int main(){
char s1[10];
char *s2 = "Hello!";
s1 = s2; // s1도 주소이고 s2도 주소인데 왜 Error가 날까?
s1은 포인터가 아닌 배열자체 이므로 s2의 주소를 s1에
넣는다고 하면 배열의 구조가 없어지게 되고 포인터가
되므로 선언한 것과 모순되기 때문에 Error가 나는 것이다.
/*
char s1[10] = "Hello!";
char *s2;
s2 = s1; // s1의 구조는 배열이지만 s1자체로는 주소를 의미하므로
s2 포인터 자체에 입력이 가능하다.
*/
//for(int i=0; (s1[i] = s2[i])!='\0'; i++);
// s2 포인터의 배열은 * (s2 + i) 를 의미(대채가능)하므로
선언가능하다.
//for(; (*s1++ = *s2++)!='\0';);
// *s1++ 이 안되는 이유는 배열의 이름(s1)는 Constant이기
떄문이다. 즉 참조만 가능하고 수정은 불가능하다.
위의 *s1++은 s1++이 먼저 실행되기 떄문에 주소값 자체를
수정하는 것이라서 Error가 난다.
cout<<"s1 = "<<s1<<endl;
cout<<"s2 = "<<s2<<endl;
return 0;
}
-------------------------------------------------------------------------------
#include <iostream>
using namespace std;
int main(){
char s1[10] = "Hello!";
char *s2;
s2 = s1;
cout<<"s2 = "<<s2<<endl;
cout<<"s2 = "<<*s2<<endl;
cout<<"s2 = "<<&s2<<endl;
return 0;
}
결과값 :
s2 = Hello!
s2 = H
s2 = 0012FF70
Press any key to continue