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
'IT이야기' 카테고리의 다른 글
django를 이용한 Vuejs 앱 개발 및 구축 (0) | 2022.04.16 |
---|---|
부트스트랩 Vue 편집 가능 테이블 열 (0) | 2022.04.16 |
java.sql에서 쿼리 가져오기.PreparedStatement (0) | 2022.04.16 |
VueJ를 사용하여 요소를 동적으로 컴파일 및 마운트s (0) | 2022.04.16 |
V-텍스트 필드 자동 완성 값이 v-model 값을 설정하지 않음 (0) | 2022.04.16 |