구조체 :: 서로 밀접한 연관이 있는 data들을 묶어놓은 틀
1 2 3 4 5 6 7 8 9 10 11 12 | typedef struct stack { int s[100]; int top; }STACK; // 이것은 구조체를 선언한 것. 정의X 선언O int main() { STACK t_Stack; // 이것은 정의 ! } | cs |
1 2 3 4 5 | typedef struct stack { int s[100]; // field , member int top; }STACK; // 이것은 구조체를 선언한 것. 정의X 선언O | cs |
구조체 안의 s[100]과 같은 것들에 대하여 stack 구조체의 field 또는 member 라고도 부른다.
1 2 3 4 5 6 7 8 9 10 11 12 | typedef struct stack { int s[100]; int top; }STACK; // 이것은 구조체를 선언한 것. 정의X 선언O int main(){ STACK s1; STACK s2; s1.top = -1; s2.top = -1; } | cs |
구조체 내부의 멤버에 접근하기위해서 '.' 를 사용하여
s1.top = s1의 top 라는 의미로 해석한다.
1 2 3 4 5 6 7 8 | int main(){ STACK s1; STACK *s2; s2 = &s1; s1.top = -1; s2->top = 1; } | cs |
만약 구조체 변수가 '*'(포인터) 로 정의되어 있는경우 '.' 이 아닌 '->'를 사용하여 멤버에 접글을 한다.
s2->top = s2가 가르키고 있는것의 top 라고 해석한다.
위의 코드가 진행이되면 s2 는 s1을 가리키고 있기때문에
s2->top = 1; 코드를 만나면서 s2가 가리키고 있는 s1의 top 멤버의 값을 1로 바꾸기때문에
s1.top 의 값이 1로 변경이된다.
구조체는 보통 POINTER 로 넘겨준다 .
함수에서 호출하고 할 때 Call by value 로 호출을 하면
계속 복사를 해야되서 복사를 하는 메모리도 필요하고, 복사를 하는 시간도 걸리기때문에
보통 C프로그래밍 개발자들은 모두다 pointer 로 넘겨준다.
구조체의 '.' 과 '->' 를 이용한 간단한 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include<cstdio> #include<cstring> typedef struct stack { int s[100]; int top; }STACK; // 이것은 구조체를 선언한 것. 정의X 선언O // 선언 :: declaration // 정의 :: definition void push(STACK* s, int data); int pop(STACK* s); int main(){ STACK s1; STACK s2; s1.top = -1; s2.top = -1; push(&s1,100); push(&s1,200); push(&s1,300); int x = pop(&s1); x = pop(&s1); push(&s1,400); x = pop(&s1); x = pop(&s1); printf(" x = %d\n",x); push(&s2,10); push(&s2,20); x = pop(&s2); printf(" x = %d\n",x); } void push(STACK *s, int data){ s->top = s->top+1; s->s[s->top] = data; } int pop(STACK *s){ s->top = s->top -1; return s->s[s->top+1]; } | cs |
728x90
728x90
'Dev > [C]' 카테고리의 다른 글
[개탱][C][전처리(preprocessor directives)][헤더파일 중복선언 방지] (0) | 2018.01.02 |
---|---|
[개탱][C][변수 읽는법][Pointer][Double Pointer][함수 포인터][더블 포인터][포인터] (0) | 2018.01.02 |
[개탱][C][분리 컴파일[Separate compilation]] (0) | 2018.01.02 |
[개탱][C][typedef][Typedef Struct ][사용자 정의 구조체] (0) | 2018.01.02 |
[개탱][C][선언과 정의][메모리] (0) | 2018.01.02 |