프로그래밍

 3198, 1/160 회원가입  로그인  
   lawsoul
   안녕하세요 c언어 초보자 도움좀 주세요(2) [C언어] [해결완료:sohun5013님]

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3273 [복사]


1  #include<stdio.h>
2  int bon(int**p1,int**p2)
3  {
4          int*temp=*p1;        <굼굼증>
5        *p1=*p2;               <굼굼증>
6        *p2=temp;             <굼굼증>
7  }
8  int main(void)
9  {
10         int num1=10,num2=20;
11
12        int*ptr1,*ptr2;
13        ptr1=&num1, ptr2=&num2;
14
15        printf("num1의 값 : %d  ptr1의 값 : %d  \n",num1,*ptr1);
16        printf("num2의 값 : %d  ptr2의 값 : %d  \n",num2,*ptr2);
17
18        bon(&ptr1,&ptr2);
19
20        printf("ptr1 의 값 : 20  ptr1 의 값 : 10 이 되어야 성공입니다!  \n");
21        printf("ptr1 의 값 : %d  ptr2 의 값 : %d \n\n",*ptr1,*ptr2);
22
23        return 0;
24 }
-------------------------------------------------------------------------------------------
위의  <굼굼증>부분에서
{
        int*temp=*p1;       // <<= 왜 *p1 이 되어야하죠? 그냥 p1 또는 **p1이 아니고요?
               *p1=*p2;
               *p2=temp;    
}
이중 포인터 문제라는것 까지는 이해를 했습니다.
단순히 선언식 이외 문장에선  *을 하나 차감해서 쓰는것 뿐인가요?

그렇다면

21번째 줄에서

printf("ptr1 의 값 : %d  ptr2 의 값 : %d \n\n",*ptr1,*ptr2);
에서 *ptr1,*ptr2 는 왜 차감을 하지않고  포인터* 를 붙여쓰게된건가요?
단순히 차감을 해서 쓰는게 일반이었다면

printf("ptr1 의 값 : %d ptr2 의 값 : %d \n\n",ptr1,ptr2);

문장도 오류가 없어야 될텐데 빌드가 안되네요..


도움좀 주세요. 어디서부터 어떻게 잘못이 됬는지 굼굼합니다.



ps.좋은 아침입니다~^^


  Hit : 6859     Date : 2012/01/15 05:01



    
lawsoul 단순히 차감해서 쓰되 printf 문에서만 주소값을 위해 다붙여준다. 로 이해해도 되나요?

알고싶습니다. 도와주시면 감사하겠습니다~
2012/01/15  
sohun5013 어라? 빌드가 안 돼요? printf문 포인터 그냥 쓰는 것도 문제는 없을텐데, 바른 결과는 아니지만 컴파일은 되지 않아요? 에러메시지 뭐 뜨는데요? 2012/01/15  
lawsoul 1>c:\documents and settings\a\my documents\visual studio 2010\projects\1234\1234\4363838.c(1): error C2059: 구문 오류 : '상수'
1>c:\documents and settings\a\my documents\visual studio 2010\projects\1234\1234\4363838.c(1): error C2014: 전처리기 명령은 공백 아닌 문자로 시작해야 합니다.
1>c:\documents and settings\a\my documents\visual studio 2010\projects\1234\1234\4363838.c(8): error C2059: 구문 오류 : '상수'

에러메세지는 이렇습니다.
하지만 새벽부터 아침까지 밤새면서 오류점을 찾아냈습니다.
그 오류점은 제가 기본적인 설명을 제대로 못들어서 일어난 문제였습니다.

* 하나당 간단히 포인터가 가르키는 전 주소값에 불과했습니다.
int*ptr = &num , int**dptr =&ptr

예를 들자면 **dptr 은 num을 가르키지만
*dptr은 ptr을 가르키는 원리 였습니다.

공부하던 시간이 새벽이라 정신이 빠진상태서 강의를 듣고있었나봅니다.

위의 제 설명이 너무나 부족해서 문제를 이해한 지금 제가봐도 문제를 모르겠습니다.

앞으로 공부할땐 좀더 정신차리고 해야할 것 같습니다.

댓글달아주신 sohun5013님 성의에 감사드립니다.

ps. 그래도 좋은 공부가 됬습니다.ㅎㅎㅎ
2012/01/15