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

C/C++ Q/A
[5128] Re: 추가적으로
사랑전쟁 [lovewar] 1358 읽음    2005-07-18 14:49
다음 코드는

   printf("Part: %s; Quantity : %d; Price: %5.2f\n", p, p+20, p+22);

포인터에 대한 산술 연산이기 때문에

p + 20 이란 것은 part_record의 크기에 20배를 한 곳의 데이타를 가져 옵니다.

즉 p [20] 이란 뜻이기 때문에 가급적 배열이 아닌 것에서의 포인터 산술 연산은 피하시는 것이 좋습니다.

다음과 같이 사용하는 것이 좋습니다.
   printf("Part %s; Quantity  %d; Price %5.2f\n", p->part, p->quantity, p->price);


과제의 성격(메모리에 대한 접근방법)때문이지만, 
되도록이면 포인터에 대한 산술연산은 배열에 대해서만 이루어지는 것이 적절하다고 생각됩니다.


남병철.레조 님이 쓰신 글 :
: 포인터 캐스팅을 좀더 명확히 하는것이 필요했습니다.
: 아래는 표현 방법이 다를뿐 같은 내용입니다.
:
: printf("Part: %s; Quantity : %d; Price: %5.2f\n", p, *reinterpret_cast<int*>(((char*)p+20)), *reinterpret_cast<float*>(((char*)p+24)));
:
: printf("Part: %s; Quantity : %d; Price: %5.2f\n", p, *(int*)(((char*)p+20)), *(float*)(((char*)p+24)));
:
:
:
: 김기현 님이 쓰신 글 :
: : 과제로 프로그램을 하나 짜는데요..
: :
: : 주어진 결과를 출력하게끔 해야하네요.. 포인터와 구조체를 사용해야하구요.. 결과물은 다음과 같습니다
: :
: : ---------------------------------------------------
: : Part: Resistor; Quantity: 300; Price: 0.05;
: : Part: Capacitor; Quantity: 250; Price: 0.65;
: : ---------------------------------------------------
: :
: : #include <stdio.h>
: : #include <string.h>
: : #include <conio.h>
: :
: : typedef struct {
: :                 char part[20];
: :                 int quantity;
: :                 float price;
: :                }part_record;
: :
: : void PrintBin1(part_record a);
: : void PrintBin2(part_record *p);
: :
: : int main(void)
: : {
: : clrscr();
: :
: : part_record r, c;
: :
: : strcpy (r.part, "Resistor");
: : r.quantity = 300;
: : r.price = 0.05;
: :
: : strcpy (c.part, "Capacitor");
: : c.quantity = 250;
: : c.price = 0.65;
: :
: : PrintBin1(r);
: :
: : PrintBin2(&c);
: :
: : getch();
: : return 0;
: : }
: :
: : void PrintBin1(part_record a)
: : {
: :  printf("Part: %s; Quantity : %d; Price: %5.2f\n", a.part, a.quantity, a.price);
: : }
: :
: :
: : void PrintBin2(part_record *p)
: : {
: :  printf("Part: %s; Quantity : %d; Price: %5.2f\n", p, p+20, p+22);
: : }
: :
: : --------------------------------------------------------------------
: :
: : 일단 주어진 조건으로 코드를 짜봤는데요..
: :
: : 문제점은 PrintBin2 function에서 c.quantity 값(250)과 c.price 값(0.65)을 불러오질 못하네요..
: :
: : c.price 값("Capacitor")은 p를 사용해서 제대로 불러왔는데
: :
: : 흐음.. p+20 말고도 이래저래 다 넣어봤지만.. 에휴.. p가 &c.part 받는다면 &c.quantity는 &c.part+20이잖아요.. 그렇담 p+20 이 맏는거 아닌가요?? &c.price도 그렇구.. 조언 좀 부탁드립니다!!!!!!!
: :
: : 그럼 다들 즐거운 주말 보내세요~~ ^^

+ -

관련 글 리스트
5125 구조체(와 포인터)에 한 질문입니다~ 도와주세요.. 윽.. 김기현 1337 2005/07/16
5126     Re:구조체(와 포인터)에 한 질문입니다~ 도와주세요.. 윽.. 남병철.레조 1416 2005/07/17
5128         Re: 추가적으로 사랑전쟁 1358 2005/07/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.