IT이야기

C: 구조 정의에서 구조체에 대한 포인터

cyworld 2022. 4. 16. 11:53
반응형

C: 구조 정의에서 구조체에 대한 포인터

이 구조의 정의에서 다음 구조체에 대한 포인터를 어떻게 가질 수 있는가?

typedef struct A {
  int a;
  int b;
  A*  next;
} A;

이렇게 처음 썼는데 잘 안 되네.

typef를 정의하고 한 문에서 구조체를 먼저 선언하고 이후 정의에서 구조체를 정의할 수 있다.

typedef struct A A;

struct A
{
    int a;
    int b;
    A* next;
};

편집: 다른 사용자가 언급했듯이, 전달 선언 없이 구조체 이름은 구조체 정의 내에서 여전히 유효하다(즉, 사용할 수 있음).struct A() 그러나 typedef 정의가 완료되기 전까지는 typedef를 사용할 수 없음(그러므로 typedef 정의만 사용하십시오).A유효하지 않을 것이다.포인터 멤버 한 명만 있어도 큰 문제가 되지 않을 수 있지만, 자기 형태의 포인터가 많은 복잡한 데이터 구조를 가지고 있다면, 덜 휘두르는 경향이 있을 수 있다.

첫 번째 답안 외에 타이페프와 포워드 선언 없이 이 역시 괜찮을 것이다.

struct A 
{ 
    int a; 
    int b; 
    struct A *next; 
};

당신은 그것을 놓치고 있다.struct전에A*

  typedef struct A {
    int a;
    int b;
    struct A* next;
  } A;

전진 선언 없이 갈 수 있다.

struct A {
    int a;
    int b;
    struct A *next;
};

제발, 넌 C++가 아니라 C에 있어.

구조체를 입력해야 하는 경우(그리고 나와 함께 작업하는 대부분의 프로그래머는 그렇지 않을 경우) 다음을 수행하십시오.

typedef struct _A {
    int a;
    int b;
    struct _A *next;
} A;

분명히 구별하다_A(앞에서)struct네임스페이스) 및A(네임스페이스 유형).

¹typedef그것이 가리키는 유형의 크기와 저장고를 숨긴다 - C와 같은 낮은 수준의 언어에서 무언가를 숨기려고 하는 것은 해롭고 비생산적이라는 주장이다.입력에 익숙해지기struct A당신이 의도할 때마다struct A.

typedef struct {
 values
} NAME;

이것은 구조체를 타이핑하는 지름길이다. 나는 이것이 가장 쉬운 표기법이라고 생각한다. 단지 이름만 앞에 붙이지 말고 뒤에 붙이시오.

그럼 이렇게 불러도 돼

NAME n;  

NAME *n; // if you'd like a ptr to it.

이 접근법에 무슨 문제라도 있나?

다음 전처리기 사용:

#define structdef(NAME) typedef struct NAME NAME; struct NAME 

사용량:

structdef(node_t)
{
   void* value;
   node_t* next;
};

참조URL: https://stackoverflow.com/questions/506366/c-pointer-to-struct-in-the-struct-definition

반응형