int main(void)
{
int i=10;
int *p;
p=&i;
printf("i=%d\n,i);
*p=20;
printf("i=%d\n,i);
return 0;
}
main함수 호출
정수형 변수 i 값은 10
포인터함수 선언
p는 i가 가진값
출력값 = 10
포인터 p = 20????
출력값 = ???
밑에 출력값은 20이 나오는데
포인터p는 p가 가르키는 값인데 왜 20이죠...
주소를 할당자?값이랑 그 해당주소의 값이랑 다른거 아닌ㄴ가요
i라는 변수를 만들고 p라는 포인터를 i를 가리키고 있으니
p가 가리키고 있는놈의 값을 바꾼거니 i가 바뀌죠
int *p ---> p라는 변수를 만들건데 이 p라는 변수는 주소값을 저장하는 변수로 할거야!
p = &i ---> p에다가 주소값을 넣을 건데 i라는 변수의 주소값을 넣을거야!
그 담에 i 출력하는건 i = 10; 으로 초기화 되어 있으니 10이라고 나오는건 알테고.
int *p 가 p라는 변수를 만드는거고, 이 p값이 20으로 바뀌니깐 i값도 20으로 바뀐다는거에요?
*p = 20; ---> p가 참조하고 있는 주소에 저장되어 있는 값을 20으로 바꿀거야!
여기가 너가 이해 못하는 부분일텐데, p 에는 i의 값인 10이 저장되어 있는게 아니라 i라는 변수의 값이 저장되어 있는 메모리의 주소가 저장되어 있는거야. *p = 20; 이라는 뜻은 변수 p의 값을 20으로 바꾼다는 말이 아니라 포인터변수인 p가 저장하고 있는 주소를 찾아가서 그 주소에 저장되어 있는 값을 20으로 바꾼다는 말임
p는 i의 값을 저장하고 있는 주소가 저장되어 있으니 그 주소를 찾아들어가서 20으로 값을 바꾼다는 말임. 그러니까 당연히 i 의 값이 20으로 바뀌는거야.
어... 음...