&와 *의 사용에 관한 명확한 이해
무크
열혈강의 상으로 듣기로는 *의 역할은 세가지라고 들었습니다
1. 곱하기 연산자
2. 포인터 선언할떄
3. 가리키는곳으로 접근할떄
&의 역할은
해당 변수나 상수의 주소값을 반환하는거요밑에 코드를 봐주세요
void main()
{
int n = 10;
int *p = &n; // n의 주소값을 반환한것(&의 역할)을 포인터 변수 p에 저장
char *str2 = ABCD;// 얘는 &가 없는데도 알아서 A문자의 가장 첫주소값을 찾아가서 포인터 변수 str2에 저장합니다
왜 그런거죠? 주소값을 반환한다고 선언도 안했는데 어떡해 알아서 접근하는거죠? 이해가안가네요
printf(%d \n, *p); //p가 가리키는것으로 접근한다 즉, 10이 출력
printf(%d \n, p); // p에 저장되는것은 n의 주소값 즉, 주소값이 출력
printf(%s \n, str2);
printf(%s \n, *str2);//문제는또 문자열입니다. 위에 int값과 마찬가지로 str2를 출력하면 A문자의 가장첫주소값이
출력되야 되는것 아닌가요? 근데 주소값이 아니고 ABCD 문자열이 출력합니다 밑에처럼 *str2를 출력할라 하면
에러가 나서 실행이 안되고요
제가 물어보고 싶은것은 간단히 말해서
저는 지금 포인터를 이제 막 입문한 완전 병아리 인데
계속 의문이 드는게 코드를 짜면서도
언제 &를 쓰냐 안쓰냐
언제 *를 쓰냐 안쓰냐
도저히 구분이 안갑니다
물론 그냥 대충 &넣어봤다가 에러 뜨면 어 뺴볼까? 어 되네
*넣어봤다가 어 되네 어 안되네 하면서 대충 코드를 짤수있습니다만
명확한 이해를 하고싶습니다
누구 좀 명확하게 설명좀 해줬으면 감사하곘습니다}