다음 코드는
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도 그렇구.. 조언 좀 부탁드립니다!!!!!!!
: :
: : 그럼 다들 즐거운 주말 보내세요~~ ^^
|