c언어 포인터개념 헷갈려서 질문드려요

포인터
int alist[5] = { 1,2,3,4,5};
int *palist = alist;
*palist = 10;

내가이해한것
*이 주소를 가르키는것이라서
palist안의 값을 가르키는 주소인
alist[0]이 10이 된다

교수님이 설명들은것
palist는 아까 선언된
int *palist를 뜻한다
그래서 *(int *palist)라서 쉽게
생각하면 *이 두개면 지우고 int변수를
뜻한다고 생각하면된다.

저도 쓰면서 헷갈리는데
이게 포인터 palist가 선언된 상태이면
palist를 사용할때 앞에 int *이 생략된
형태라고 생각하면 되는건가요??

저도 가방끈이 짧지만…
저는 이렇게 이해하고 있습니다.
포인터 (말그대로) 주솟값
하지만 포인터에 *을 달면 주솟값이 담고있는 값
이렇게 알고 적용하니깐 여태까진 불편함이 없었습니다.
가르킨다는 개념은 말그대로 주소를 포인터 안에 가지고 있으니깐 표지판에 어디로 가야될지 가르키는것처럼 가르킬 수가 있다고 해서 가르킨다는 표현을 쓰는거 같네요

아 그리고 *이 포인터 선언시에 붙은 * 과 선언된 포인터에 붙은 *은 다른 별입니다
이걸 어려워 하시는거 같이 보이네요

Int *
이것 자체가 자료형입니다.(제가 c 공부한지 꽤 되서 제 기억이 맞다면)

즉 int * plist 얘는
밑에서 변수를 언급할 때 plist 라고 적는순간
이미 인트형 포인터 라는 사실을 안에 가지고 있는것이죠

3 Likes

*을 달면 주솟값, 포인터로 선언된 변수에 *을 달면 주솟값이 담고있는 값으로 이해하면 되겠네요. 이미 정수형 포인터로 선언된 plist는 이후에 *을 다시 붙일때 간단하게 이미 선언된 변수에 *을 붙이니까 값이다. 이렇게 해석이 되겠네요. *에 대해서 헷갈리는게 많았는데 좋은 답변 갑사합니다. 좋은하루 되세요~

2 Likes

우와 정답 :smiley:

1 Like

https://blog.naver.com/rhdnfka94/221046491976