2013-12-08 2 views
4

그래서 플레이어의 손에 카드를 추가하려합니다 ... 이중 포인터를 사용하는 경우에만 카드의 값이 주 기능으로 다시 전달됩니다 상단 및 마지막 카드 용. 그러나 last-> pt는 temp로 변환 할 수 없습니다. 어떻게 해결합니까?링크 된 목록에 요소를 추가하는 이중 포인터

(*last)->pt = temp; 

그것이는 (단일) 포인터로 last을 치료하고,하려고했던 원래 기록 된 방법 :

typedef struct card_s 
{ 
char suit[9]; 
int value; 
struct card_s *pt; 
} card; 

void deal_card(card **top, card **last, card dealt) 
{ 
card *temp; 

temp = (card*)malloc(sizeof(card)); 
strcpy(temp->suit, dealt.suit); 
temp->value = dealt.value; 

if(*top == NULL) 
    *top = temp; 
else 
    *last->pt = temp; //FIX ME - something is going wrong at this point 
*last = temp; 
last->pt = NULL; //FIX ME - same problem as above 
} 

답변

2

문제는 이렇게 사용 괄호를 해결해야한다, 연산자 우선 순위 것 같다 참조 금지 멤버 pt. 대신, last을 참조 해제 한 다음 결과 포인터의 구성원 pt에 액세스하려고합니다.

2

구조체에 대한 포인터가 일반적이며 위 예제의 괄호는 불편하므로 구조체에 대한 포인터에서 작동하는 다른 구조체 선택 연산자가 있습니다. P는 구조에 대한 포인터이며, m은

p->m 

구조식 가리키는-의 그 멤버를 선택 한 후, 그 구조의 부재 인 경우. 발현은 P-> m은 모호한 조합을 사용하고, 따라서 사용자 한편

(*p).m 

정확히 동일하다. 두 형식 중 하나를 사용하십시오. 예. 모두 함께

if(*top == NULL) 
    *top = temp; 
else 
    *last->pt = temp; //FIX ME - something is going wrong at this point 
*last = temp; 

, 이것은 작동합니다 :

if(top == NULL) 
    top = temp; 
else 
    last->pt = temp; 
last = temp; 

(당신이 주소를 변경하려면 가정 last->pt 또는

(*last).pt 또한이 라인이 속하지 않는 별표 내가 믿는를 포함 포인터 앞에있는 별표를 사용하면 포인터가 가리키고있는 실제 값과 비교/할당됩니다.

+0

'la st'는'card **'이므로 반드시'last-> pt'가 구조체의 멤버 ('card')가 아닌 포인터 ('card *')의 멤버에 접근하려 할 것입니다. –

관련 문제