2017-11-13 1 views
-5

현재 패킷 전송을위한 일부 소스 코드를 읽고 있습니다. 다음 의사 코드의 경우 "packet-> packet2 = (char *) data"행에 대해 실제로 의미하는 것은 무엇입니까? 변수 데이터의 문자 데이터 유형을 문자 데이터 유형으로 정의 된 packet2에 저장하는 것으로 이해할 수 있습니까? 당신이 pointer.You을 보유 할 수없는 structure.Char 변수의이 분야에 대한 포인터를 넣어 문자를 입력 char 형에서 packet2을 변경해야 할 수없는 문자C 다른 구조체에 대한 포인터

struct Node1 
{ 
    char packet1; 
    int num1; 
} 

struct Node2 
{ 
    char *packet2; 
    int num2; 
} 

int main(void) 
{ 
    struct Node1 *data; 
    struct Node1 var1; 

    struct Node2 *packet; 
    struct node2 var2; 

    data = &var1; 
    packet = &var2; 

    packet->packet2 = (char*) data; 
}  
+0

에 해당 될 것입니다. 고쳐. – klutt

+0

사실,'packet1' 변수에'packet2' 필드가 없습니다. 왜냐하면'Node1' 타입이기 때문입니다. – alseether

+0

컴파일해도 틀린 것이 틀림 없습니다. 'char'에 포인터를 넣을 수 없습니다. –

답변

0

packet2 *이 타입이다. 이것은 char poier를 dereferencing하면 1 바이트를주기 때문에 각 바이트를 따로 사용할 수 있음을 의미합니다.

packet2[0] 

은 var1 구조의 첫 번째 바이트에 대한 액세스 권한을 부여합니다. 이러한 일을 할 때 패딩 바이트가있을 수 있으므로 매우주의해야한다는 점에 유의해야합니다. 이러한 경우 offsetof 매크로를 사용할 수 있습니다.

packet->packet2[0] = 5; 

이 컴파일되지 않습니다

var1.packet1 = 5; 
+0

내가 볼 수 있습니다. 그래서 만약 packet2를 char * 타입으로 변경했다면, "packet-> packet2 = (char *)"데이터는 무엇을 의미합니까? – emddev

+0

이것은 packet2가 Node1 * 데이터를 가리 키도록 의미합니다 .post2 [0]는 구조 etc..but 패딩을주의하는 것이 중요하다. –

0
struct Node1 
{ 
    Node2*/or Node1*.... packet1; 
    int num1; 
} 

struct Node2 
{ 
    Node1* packet2; 
    int num2; 
} 

int main(void) 
{ 
    struct Node1 *data; 
    struct Node1 var1; 

    struct Node2 *packet; 
    struct Node2 var2; 

    data = &var1; 
    packet = &var2; 

    packet->packet2 = data; 
}  
관련 문제