[C언어 질문] 포인터 에서 *의 역할
새길
C언어 포인터부분을 공부하고있는데..지금 이해가 안가는게 소스보다보면 포인터에서*를 쓸때가 있고 안쓸때가 있더라고요..그래서 이게 어떨때 쓰고 어떨때 안쓰는건가요..가끔 보면 연산할때 어떨때는 쓰고 언제는 안쓰고 그러던데..답변해주세요~그리고 이거의 역할도요~아맞다.. 그리고 &이 연산은 예를 들어 포인터 ptr = &num 이라고 하면 ptr 이 num을 가리키게 되면서 num의 값을 얻는건가요?
-
예다움
그냥 지금까지 포인터에 갖고 있던 생각을 싹 다 포맷하고
생으로 배운다는 생각으로 포인터 단원을 보세요.
그리고 다 본 다음에 (읽기는 아직 뭔가 어려움)
변수 단원을 다시 읽고 sizeof같은게 왜 필요한지도 보고
다시 포인터 단원에 와서 읽어보세요.
정도면 되려나... 뭔가 뻘짓같아보이긴 하네요. -
하양이
아니요, 예를 들어 i값을 4로 가정했을 때 *n = *n + 1 은 i 값을 증가시키고 n = n + 1 은 포인터의 주소값을 증가시킵니다.
-
채움늘
한가지만 더물어볼께있는데 그러면
*n+1 을 하면(int 형) 주소값이 당연히 4가 올라가는거죠?
그리고 만약에
n+1 이면 어떻게되는건가요.. ㅠ
둘다 포인터 입니다. -
회사원
감사합니다.^^
-
은별
그리고 *n는 포인터 n에 입력된 주소값에 담긴 내용을 의미하고
&i는 i라는 변수의 메모리에서의 주소값을 의미합니다.
이정도면 * 와 & 가 이해가 가실련지요? -
푸헷
로 끝나고 리턴값이 없습니다. 왜냐면 plus_one(&i)로 주소값을 전달하면, plus_one 함수에서 i가 위치하는 주소를 받았기 때문에 *n = *n + 1 로 인해서 i의 주소값을 찾아가서 i가 가지고 있는 정수값에 1을 더한 값을 대입하기 때문에 i 변수 자체가 1 증가한 결과가 나타납니다.
따라서 이를 주소값을 참조해서 그 변수를 조작한다고 해서 참조호출이라고 합니다. -
감춰왔던
ptr = &num 은 num의 메모리 주소값을 ptr 변수에 대입한다는 뜻입니다.
따라서 ptr은 주소값을 의미하고, *ptr은 그 주소 안에 들어있는 값을 의미합니다.
또한 보다보면 왜 포인터를 쓰는 지 궁금하실 수 있는데 이는 포인터를 사용하면 값 호출이 아닌 참조 호출이 가능해지기 때문입니다.
예를 들어 int plus_one(int n); 함수는 n을 입력받으면 n에 1을 더해서 돌려준다고 칩시다.
이 때 함수의 내용은
n = n + 1;
r -
한무릎
책중에 c언어 포인터마 다룬책이 있어요.
c언어 어느정도 배우고 (포인터 직전까지만) 포인터 책으로 마무리하면 좋죠.
그다음 c - c++ 차이만 설명된 책이 또있어요.
이것만 보면 c++까지 공부되요. -
한결
;; 이런 책도 좋긴 하지만 C 책 속의 포인터 이해하는방법도 좋을것같네요 ㄷㄷ
엄청 대충 나와있나요 설마? -
살랑살랑
포인터의 개념확립이 필요합니다!