본문 바로가기

C

23장 . 구조체와 사용자 정의 자료형 2

[구조체 변수의 전달과 리턴]

[함수의 인자로 전달되는 구조체 변수]

  • 구조체 변수의 인자 전달 방식은 기본 자료형 변수의 인자 전달 방식과 동일하다
  • 구조체 변수의 연산은 대입연산 (=)만 가능하며, 이외의 사칙 연산은 적용 불가
  • 리턴 역시 기본 자료형 변수의 리턴 방식과 동일하다 . 
struct simple{
	int data1;
    int data2;
};

void show(struct simple ts);	//call by value
void swap(struct simple* ts);	//call by reference

int main(){
	struct simple s={1,2};
    
    show(s);
    swap(&s);
    show(s);
    
    struct simple s2=s1;
    show(s2);
    return 0;
}
void show(struct simple ts)
{
	printf("data 1: %d , data 2 :%d\n",ts.data1,ts.data2);
}

void swap(struct simple * ps)
{
	int temp=ps->data1;
    ps->data1=ps->data2;
    ps->data2=temp;
}

[구조체의 유용함]

  • 잘 구현된 프로그램은 처리되어야 할 데이터의 부류가 적절히 나누어 진다 .
  • 부류를 적절히 나누면 데이터를 처리하는 과정이 수월해진다 .

[중첩된 구조체]

struct cirecle{
	struct point p;
    double radius;
}

struct point{
	int x;
    int y;
}

void main()
{
	struct circle a;
    a.p.x=3;	//내부 구조체로의 접근
}

[typedef 키워드의 이해]

[typedef]

typedef int INT;

=>int 에게 INT란 이름을 부여하겠습니다 . 

 

[구조체로의 적용]

//type 1

struct Data
{
    int data1;
    int data2;
}typedef struct Data DATA;

=> struct DATA a (가능)
=> DATA a (가능)

//type2

typedef struct Data
{
    int data1;
    int data2;
}DATA;

=>struct DATA a (불가)
=>DATA a (가능)

[공용체]

[공용체의 특성]

하나의 메모리 공간을 둘 이상의 변수가 공유하는 형태

가장 큰 것 기준으로 할당 , 각각의 요소들이 공유한다 . 

union u_data
{
    int d1;
    double d2;
    char d3
}

[열거형]

[열거형]

  • 특정 정수값에 의미를 부여 할 수 있다
  • 프로그램의 가독성을 높일 수 있다/
enum Color {RED=1 , GREEN = 3 , BLUE = 5};