[C/C++] C++ 수업내용 Pointer

Posted in 단체/ㄴ대학 전공 수업 by

#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