Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[6488] 포인터에 배열이름을 대입할때 생기는 일.
이상욱 [] 6027 읽음    2010-01-22 03:05
이 개념만 제대로 잡히면 뻥~ 뚫릴것 같아서 '간곡히' 질문 올립니다.)

처음으로 프로그래밍이라는걸 공부하게 됐습니다.
역시 고비는 포인터에서 왔는데요.
열심히 파다 보니 " 올레~~ "  포인터라는게 뭔지 알게된 것 같았습니다.
뭐 좀 더 부연 설명이 필요한 부실한 정의지만
제 나름대로 포인터를 이렇게 정의했죠..

오로지 주소값만을 값으로 가지는 변수!!

이 말은 "어딘가를 가리키는 일만 한다"는 뜻과도 같다고 생각했습니다.
저는 포인터를 이용해 값을 출력하는 경우가 가장 많이 혼란스러웠는데
이 경우도 포인터가 가지고있는 값을 보여주느게 아니라 *(에스터뤼스크)를 이용해서
포인터가 가리키고 있는 주소에 들어가있는 값을 참조하여 보여준다는 것으로 생각했습니다.
(여기까진 문제가 없나요?? ;;;;)

저의 이 정의가 질문에 적힌 저 상황만 만나고나면 무너집니다.(아래 코드의 (3번)라인.)
역시 말보다는 코드가 설명하기 좋을것 같아서 제가 테스트했던 간단한 코드를 소개하겠습니다.

#include <stdio.h>

main()
{
char *pnt;
char str[] = "bluesky and shine";

pnt = str; // <--(3번)

printf("%s / 0x%x\n", str, str);         // <--(1번)
printf("%s / 0x%x\n", pnt, pnt);        // <--(2번)
system("pause");
}

코드실행 결과는
=================================
bluesky and shine / 0x12ff40
bluesky and shine / 0x12ff40
계속하려면 아무키나 눌러주세요...
=================================
이렇습니다. 저의 질문은 (1번)라인과 (2번)라인에 모두 있습니다.

[질문1]
(1번)라인에있는 두번째 str(빨간글씨)입니다.
제 생각엔 주소값을 출력하려면 &str로 적어 줘야 할 것 같아서요.
저렇게 그냥 str로 적어 놓으면 str배열 안의 값을 앞에서 선언한 서식문자인 %x형식으로 출력해야 할것같습니다. 즉, 문자열 "bluesky and shine"가 16진수로 표현되여 화면에 출력 되야 할것같다는 말입니다.
똑같은 변수 str로 명시해 두었고, 서식문자만 다르니까 말이죠.
그래서 두번째 str(빨간글씨)를 &str로 고쳐서 다시 컴파일, 실행 해봤습니다. 결과는 동일했습니다.

영~찝찝해서 "배열이름"은 "그 배열의 첫번째값이 들어 있는 주소값"을 가리킨다 말을 생각해보았습니다.
그렇다면 똑같이 str로 변수가 명시되어있어도 앞에 서식문자에 따라  %s의 경우엔 "null을 만날때까지 배열안의 문자를 출력해라." 가 되고 %x인 경우엔 "주소값을 보여줘라" 로 컴퓨터다 다르게 수행을하는 건가요?

[질문2]
이번엔 (2번)라인의 첫번째 pnt입니다. (3번)라인에 의해서 pnt라는 포인터 변수에 str배열의 첫번째 요소가들어있는 주소값 즉, &str[0]요놈이 들어가게 되는거는 알겠습니다. ( 변수이름 == &변수이름[0] 이니까요)
그렇다면, %s형태로 pnt가 아닌 *pnt를 출력하라고 명령해야 "bluesky and shine" 요놈이 출력될것 같은데 이상하게 그냥 pnt로도 "bluesky and shine"가 넘흐나 얇밉게도 잘 출력 되고 있다는 것입니다.
위의 코드에서 처럼 그냥 pnt로 한다면 pnt가 가지고 있는 str배열의 첫번째요소의 주소값이 %d방식으로 표현되야 할 것 같은데 말이죠.

그래서 타협을 하고 계속 공부를 진행했습니다.
" 포인터에 배열이름이 대입되면 둘이 완전 똑같아 진다. "
(단, 포인터는 변수적 성격을 가지지만 배열은 상수적 성격을 가진다는 차이만 제외한고...)
이러고 나서는 뒤에서 같은 상황을 만나도 뭐 이해할순 있었습니다.
그러나 마음 한켠의 찝찝함이 가시질 않습니다.
뭔가 제가 심각하게 모르고 있는 부분이 있거나 착각하는 부분이 있는것 같아요
먼저 공부 하신 분들의 명쾌한 해답 기다리겠습니다.

(부족한 제 질문을 끝까지 읽어 주셔서 감사합니다.)

+ -

관련 글 리스트
6488 포인터에 배열이름을 대입할때 생기는 일. 이상욱 6027 2010/01/22
6492     Re:포인터에 배열이름을 대입할때 생기는 일. 이동일 3892 2010/02/01
6490     Re:포인터에 배열이름을 대입할때 생기는 일. 이명훈 4154 2010/01/23
6489     Re:포인터에 배열이름을 대입할때 생기는 일. Intotheblue 3020 2010/01/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.