int a =3; int *p= &a; *p=5;
현재 포인터가 가리키는 변수를 의미 : *p ==a
라고 써있는데...
일단은 int a = 3 은 이해가 돼.
그리고 int *p = &a; 이거 까지도 이해가 돼.
근데 *p=5부터 이해가 안 됨.
int a = 3 으로 선언하고
int *p = &a; 라는 것도 선언 했으면
*p = &a = 5 아님?
왜 *p = a가 됨??
*p = &a 아님...?
포인터p는 a의 주소값을 나타내야지 왜 a의 값을 나타냄...?
무슨 역참조. 참조란 개념부터 잘못됨. p 는 a 의 주소값이고 *p 는 a 의 내용이고 바보야.
변수 선언할때의 unary 연산자 * 는 주소타잎을 나타내는거고, 연산에서의 unary 연산자 *는 그 주소의 내용을 가리키는거고.
& -> address of. * -> content of
p가 a의 주소값이려면 아예 처음부터 p=&a로 선언해야 되는 거 아님?
p가 int 타잎의 내용을 가리키는 주소를 나타낸단 의미로 int* 로 선언한거고.
"연산에서의 unary 연산자 *는 그 주소의 내용을 가리키는거고." 라고 했잖아. 그럼 주소의 내용이 +2만큼 오르면 주소도 +8만큼 증가하는 거야?
int 를 가리키는 주소형 p 에 int 형인 a 의 주소를 대입해 준거고. 그게 int* p = &a; 가 된건데
주소가 증가할때 +2가 +8 이 되는거지 내용이 증가할땐 무슨상관.
목적을 전혀 모르고 달달 외우려고 하니 힘들긴 하겠다. ㅉㅉ
포인터형 선언에서 type* 변수명; 이란 표현에서의 * 는 연산자가 아니야.
단지 주소 타잎을 의미하는거임. 그러니 내가 평소에 int* p; 가 맞다고 하는거고 int *p; 로 표기하는 사람들 극혐이라고 하는거지.
엥? type* 변수명; 이게 아니라 type *변수명인데. 이거 오타임?
아............................ int *p;라고 해서 헤깔림.... int* p;라고 하는 게 맞는 거구나...........
근데 주소 타잎을 의미하려면 *int p라고 해야 옳지 않음?
애초에 대상의 크기 라는게 있다는게 일반 변수선언과 다른 케이스인데 어느쪽이 앞이면 어때.
리턴 타잎 함수명(인자) { 함수정의 } 인 언어도 있고 함수명(인자) 리턴타잎 { 함수정의 } 인 언어(swift)도 있다. 그딴게 중요한게 아님.
고맙다!!!! '포인터형 선언에서 type* 변수명;' 이거를 그냥 주소 타잎을 나타낼 때 쓰는 거로 이해하면 되겠네. int* p = &a, *p=a 이렇게. 쉽게 설명해줘서 고맙다.
굳!