1579, 1/79 회원가입  로그인  
   우느님
   [자작]c언어 <포인터> 캐쉽게 설명해드려요~ 2

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=1917 [복사]


여러분들은 앞의 강의에서 포인터가 무엇인지 알았습니다.

<포인터는 주소라고 했습니다.>
<그리고 포인터(주소)를 구하고싶으면 변수앞에 '&'만 붙이면 된다고 했습니다.>

이제 다음 단계로 넘어갈게요~

아래의 예제를 봐주세요~~

<예제>

#include <stdio.h>

void main()
{
       int a=3;
       int *b;
      
       b = &a;
      
      
       printf("변수 a에 저장되어 있는 정수 : %d\n",*b);
      
       printf("그럼 이건 멀까? : %d\n",b);
       printf("그럼 이건 또 뭘까? : %d\n",&b);
}

<설명>

int *b;   << 이 부분을 설명하겠습니다.

int *b 는 int형의 포인터(주소)를 저장하는 포인터변수 입니다.

포인터변수임을 나타내기 위해 ' * '를 붙였네요.

b = &a;

그래서 위와 같이 포인터(주소)를 저장했네요.



printf("변수 a에 저장되어 있는 정수 : %d\n",*b);   << 이 부분을 설명하겠습니다.

정수를 출력하기위해 인자로 *b를 썼네요.

왜 ' * '가 붙은걸까요??

위에선 포인터변수임을 나타내기위해 붙였다고 했습니다.

하지만 이것은 변수를 선언할때만 해당하는 이야기 입니다.

여기서 현재 포인터변수b에는 a라는 공간의 주소(포인터)가 저장된 상태입니다.

그렇다면 a라는 공간에 있는 물건을 나타내기위해서는 어떻게 해야할까요?

' * ' 를 붙이면 됩니다.

*b 라는 것은 포인터변수에 저장된 포인터(주소)에 저장되어있는 값을 나타내는 것입니다.

그러면

변수 a에 저장되어 있는 정수 : 3

이렇게 출력될거라는 것을 알 수 있을 것입니다.


그럼

printf("그럼 이건 멀까? : %d\n",b);

이건 뭘까요?

' * '가 붙어 있지 않네요.

포인터변수 b 에는 현재 변수a의 포인터(주소)가 저장되어 있습니다.

그러면 저장되어있는 포인터(주소)가 출력되겠군요.


printf("그럼 이건 또 뭘까? : %d\n",&b);

이건 또 뭘까요?

포인터변수는 포인터(주소)를 저장하는 변수라고 했습니다.

포인터변수도 변수입니다.

단지 포인터(주소)를 저장하는 변수일 뿐입니다

그러니까 포인터변수도 당연히 포인터(주소)가 있겠죠?

포인터변수 b 에 참조연산자('&')를 붙이면.포인터변수의 포인터를 나타내게 되는 것이죠.

< '&'를 주소연산자라고 합니다. >

그럼 위의 printf문을 출력해보면

포인터변수b의 포인터(주소)가 출력이 되겠네요.





그런데 여기서 포인터변수의 포인터도 저장할 수 있을 거란 생각이 들지않나요??

저장할 수 있습니다.

이렇게되면 이중포인터, 삼중포인터, 사중포인터, ~~ , 다중포인터가 되는거죠.



이 내용은 다음 강의에서 게속됩니다.

  Hit : 5233     Date : 2012/01/07 07:51
[불법/스팸글로 신고하기]



    
hipro GG... 2012/01/08  
우느님 읽어주셔서 감사합니다. 2012/01/09  
lawsoul 좋은 정보 감사합니다.

긴가민가 했던부분이 다시 잡혀서 기분이 상쾌하네요 ㅎㅎ.

감사합니다 ~
2012/01/16  
dudals3938 궁금한게 있는데요....
1.다중포인터 를 어느경우에 사용해요?? ( 불편하고 복잡하기만하고 효과는 별로인것같은데..)
2.int a=3;
int *b;

b = &a;

printf("변수 a에 저장되어 있는 정수 : %d\n",*b);
여기서요, 변수를 지정하고 변수의 포인터(주소)를 지정하셧잖아요...(아닌가?)
변수의 포인터를 꼭 정해야하나요? 복잡하기만한데...예를들어서
int a=3;

printf("변수 a에 저장되어 있는 정수 : %d\n",a);
이렇게 쓰면 간편하고 좋을듯한데... 어떤경우에 포인터를 정하는지 궁금해요.

ps.제가 초보라서....ㅈㅅㅈㅅ;; 궁금해서 씁니다.
2012/01/23  
우느님 dudals3938//

1.다중포인터 를 어느경우에 사용해요?? ( 불편하고 복잡하기만하고 효과는 별로인것같은데..)

음~~~
malloc 함수라고 있습니다.
malloc 함수는 전달인자로 준 크기 만큼 메모리공간을 할당해주는 함수입니다.

그런데 여기서말이죠.
malloc함수님께서 프로그래머가 원하는 크기만큼의 메모리공간을 만드러주었는데
이 공간을 이용못하면 정말 안습하게 되는거죠 ㅠ.ㅠ

그래서 malloc함수는 자기가 만든 공간의 포인터(주소)를 리턴한답니다ㅎㅎㅎ
프로그래머는 이 리턴된 포인터(주소)를 이용해서 만들어진 메모리공간을 사용한답니다ㅎ

이때, 포인터변수가 사용될테고 그 포인터변수를 통해서 만들어진 메모리공간을 조지고 볶고 하겠져?ㅎ

자, 그럼 좀 더 생각해봅시다.

malloc함수랑, 다중포인터를 이용하면

n X m 행렬을 구현할 수 있을 것 같다는 생각이 들지 않나요??

든다구요??

문제를 드리겠습니다.

n X m 행렬을 구현하시오.
몇 행 몇 열인지 사용자로부터 입력받고,
입력받은 행과열만큼 행렬을 구현하시오.
최대 5행 5열 까지 가능하며, 범위를 넘을 시 오류메세지를 보내고,
다시 입력받도록 하십시오.
입력받은 행과열만큼 행렬을 구현하여 사용자로부터 값을 대입받고,
대입받은 값을 화면에 출력하시오.

다음은 실행 예 입니다.
[output]
n X m Matrix maker !
n ? 3
m ? 2
1-1 ? 1
1-2 ? 2
2-1 ? 3
2-2 ? 4
3-1 ? 5
3-2 ? 6

Your 3 X 2 matrix is...
1 2
3 4
5 6

press any key to continue

힌트 : 2차원배열을 다중포인터를 이용하여 구현할줄 아는가?

이 문제는 안풀어도 좋습니다.

제가 막 메모리를 효율적으로 사용하기위해선 포인터를 이용하는게 좋다
그러니까 다중포인터를 이용해서,,,어쩌구저쩌구 꺆꺆@!#!@#@!!@#!@#@!#@!#ㅁㅇㄴㄹ

이런식으로 답변을 한다면 질문자가 답변을보고 이해하기도 힘들뿐더러 알고 있는 지식을 자랑하는 꼴밖엔 안된다고 생각합니다.

그래서 다중포인터를 이용하는 한 가지 예제만 위에 제시하였습니다.

다중포인터랑 포인터를 서로 다른 것이라 생각하지마십시오.
포인터(다중포인터)는 매우 많이 사용됩니다.

진도를 게속 나아가 보세요.

2.

1번답변에서 말한 malloc 함수같은 포인터(주소)를 리턴하는 함수를 써먹을려면
포인터를 이용해야 합니다.

포인터는 정하는것이 아니고 고유한 메모리주소이며,
이 메모리주소는 16진수로 복잡하게 나타나있기때문에
원활한 설명을 위하여 제가 임의로 숫자를 간단하게 정한 것입니다.



ps. 열혈강의 C,
뇌를자극하는 C프로그래밍,
등등..

C언어 기본서를 한번 완벽히 숙지하시고 강좌글을 보시는 것을 추천합니다.
2012/01/24  
1579     [re] 추가 설명[9]     暴走天使
09/11 8695
1578   부산에서 같이 공부 할 분 있어요?ㅋㅋ[4]     연산동고래
01/16 6569
1577   [자작] C언어 War Game Release 04.01 < Solution > 10진수      우느님
04/12 5732
1576   [자작] C언어 War Game Release 04.01 < 상금 : 50000원 >[11]     우느님
04/01 5628
1575   [자작] C언어 War Game Release 04.01 < Solution > 16진수     우느님
04/11 5384
1574   [자작]c언어 <포인터> 캐쉽게 설명해드려요~ 3 (수정)[8]     우느님
01/07 5239
  [자작]c언어 <포인터> 캐쉽게 설명해드려요~ 2[5]     우느님
01/07 5232
1572   [자작]적절한 네트워크 정리[1]     우느님
01/03 5577
1571   [자작]c언어 <포인터> 캐쉽게 설명해드려요~[6]     우느님
01/07 5310
1570   [자작] 왜 Little Endian 인가 ?[6]     우느님
03/09 5487
1569   하드웨어와 소프트웨어...그리고 불가능한일?[16]     아이프리드
01/11 7945
1568   [Project] 전기,전자 상식 및 샤프심으로 전구만들기. - 3[16]     아이프리드
02/03 11092
1567   [Project] 전기,전자 상식 및 샤프심으로 전구만들기. - 2     아이프리드
02/03 8096
1566   [Project] 전기,전자 상식 및 샤프심으로 전구만들기. - 1[11]     아이프리드
02/03 9888
1565   #01 Protel CAD - 서문     아이프리드
11/21 8895
1564   [자작] C언어 변수 이해하기[9]     싫어 내가할꺼야
02/13 7205
1563   C언어로 만든 그래픽 프로그램[11]     승리의박성환
04/22 16566
1562   리눅스 설치 + Windows설치(생초보에게 좋은 강좌)!![3]     승리의박성환
04/15 12726
1561   밑에 제가 올린 API 소스에 대해서.........     승리의박성환
10/02 6992
1560   NET SEND 명령강좌[8]     서덕진
09/23 5388
1 [2][3][4][5][6][7][8][9][10]..[79]

Copyright 1999-2021 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com