struct ABC {int a; char b; double c; } 가 자료(변수)의 형식(배열방식)을 이름 붙인 거고
typedef struct ABC ;하면 ABC를 int 같이 일반 규격으로 인정하고.
이후 struct ABC Tag1;이라고 하면 {a, b, c ....} 형으로 작성된 자료 Tag1를 만듬.
struct ABC Tag[20];이라 하면 ABC 형식으로 된 자료(변수) 20개를 만드는데 그 이름은 Tag[1], Tag[2], ~ Tag[20]
위에서 틀린 거 있나요?
그리고 struct 내에 멤버 중에 char name[20] 이 있는데
Tag[1].name 에 '안녕' 을 넣어서
printf('%s', Tag[1].name) 하면 나오게 할 방법이 있음?
typedef struct ABC ;하면 ABC를 int 같이 일반 규격으로 인정하고.
이후 struct ABC Tag1;이라고 하면 {a, b, c ....} 형으로 작성된 자료 Tag1를 만듬.
struct ABC Tag[20];이라 하면 ABC 형식으로 된 자료(변수) 20개를 만드는데 그 이름은 Tag[1], Tag[2], ~ Tag[20]
위에서 틀린 거 있나요?
그리고 struct 내에 멤버 중에 char name[20] 이 있는데
Tag[1].name 에 '안녕' 을 넣어서
printf('%s', Tag[1].name) 하면 나오게 할 방법이 있음?
typedef 를 붙였다면 struct ABC Tag1; 처럼 쓸 필요없이 ABC Tag1; 처럼 선언할 수 있는거다. 타입이니까 말야.
strcpy를 쓰면 에러가 나서요
아 그랬죠
에로망가센세가 착각하는데 그렇게 하면 Tag1 이 타입이지.
Tag1 temp; 처럼 쓸 수 있게 되는것
최근 C++ 컴파일러에서는 그냥 struct AAA{ ... }; 라고 써도 AAA 는 타입임. class 선언과 동일.
struct 는 public 이 default, class 는 private 가 default 라는 차이 밖에 없어. 그러니 typedef 가 struct 와 함께 잘 쓰이지 않지.
typedef struct {...} Tag1; 하시면 바로 Tag1이라는 변수명으로 사용가믕 <- Tag1 이라는 타입으로 사용가능하게 되어버린거다.
좀 더 쉽게 설명해주자면, typedef struct AAA{ ... } BBB; 라고 사용할 경우 BBB 는 타입이지만 AAA 는 앞에 struct 를 써 줘야 타입이다.
typedef struct AAA{ ... } AAA; 처럼 두 이름을 갖게 써도 무방하다. 괜히 이름 여러개 딴다고 득볼게 없지. 네임테이블만 낭비할 뿐.
ㄱㅅㄱㅅ
앞의 AAA 라는 표현이 존재하는 이유는 구조체 내부에서 링키드리스트든 노드 같은 포인터 같은걸 가지기 위해서는 뒤의 BBB 를 만나기 전에 자기 타입의 포인터를 선언할 수 있어야 하기 때문인데,
다시 말하지만 C++ 컴파일러에선 struct 앞에 굳이 typedef 를 쓸 필요없기 때문에 struct AAA{ ... }; 라고 선언하는게 선호된다. ( 간결성 )
배열 index는 0부터임 - dc App