2017-05-09 2 views
0

숫자 i와 구조체 목록을 포함하는 구조체를 가리키는 포인터는 기본적으로 모든 목록을 살펴보고 구조체의 번호가 i인지 확인합니다.포인터를 사용하여 구조체 내의 목록 내의 구조체에 액세스하는 방법은 무엇입니까?

typedef struct struct1 { int num; } struct1; 

typedef struct struct2 { 
    struct1 somestruct1; 
    struct2 *pnext; 
} struct2; 

struct struct3 { 
    struct2 somestruct2; 
}; 

내가 코딩에 새로운 그리고 난이 알아낼 수없는 것, 여기에 내가 struct3

struct3 temp->somestruct2.somestruct1.num ; 

답변

0
struct3 s3; 

int num = s3.somestruct2.somestruct1.num; 
에 대한 포인터 주어진 일부 struct1에서 NUM 필드에 액세스하기 위해 노력하고있어 방법

또는

struct3 *s3; 

int num = s3->somestruct2.somestruct1.num; 
0

IT는 사용 여부로 인해 사용자의 혼란이있을 것으로 보인다 "." 또는 "->"

다음

일반적인 규칙은 ... 왼쪽에있는 항목이 포인터를 경우

사용 "->". 포인터가 아닌 경우 "."를 사용하십시오.

"temp"가 "struct struct3 temp"로 정의 된 경우 temp는 포인터가 아닙니다. 따라서 "." 임시 요소의 하위 요소에 액세스합니다.

임시 하위 요소 "somestruct1"도 struct2의 포인터로 정의되지 않습니다. 따라서 somestruct1의 하위 요소에 액세스하려면 "."이 따라 와야합니다.

temp.somestruct2.somestruct1.num 
0

다음은이 작업을 수행 할 수있는 방법의 예입니다.

#include <stdlib.h> 
#include <stdio.h> 

typedef struct struct1 { int num; } struct1; 

typedef struct struct2 { 
    struct1 somestruct1; 
    struct struct2 *pnext; 
} struct2; 

struct struct3 { 
    struct2 somestruct2; 
}; 

int main() 
{ 
    struct struct3* s = malloc(sizeof(struct struct3)); 

    s->somestruct2.somestruct1.num = 1; 
    printf("%d\n", s->somestruct2.somestruct1.num); 

    free(s); 
} 

포인터가 있으면 포인터가 가리키는 것을 사용하기 전에 포인터를 참조 해제해야합니다. 역 참조 연산자는 단항 *이고 그 다음에 .이 structs 멤버에 액세스합니다.

너무 오래 손이 매우 일반적인 작업입니다 그들을 결합한도 매우 추악한, 그래서 운영자가 따라서,

s->somestruct2.somestruct1.num = 1; 
->입니다

(*s).somestruct2.somestruct1.num = 1; 

를 작성할 수

관련 문제