포인터 캐스팅을 좀더 명확히 하는것이 필요했습니다.
아래는 표현 방법이 다를뿐 같은 내용입니다.
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도 그렇구.. 조언 좀 부탁드립니다!!!!!!!
:
: 그럼 다들 즐거운 주말 보내세요~~ ^^
|