반응형
SMALL

학습목표

1. 구조체를 이용한 매개변수사이의 자료전달 방법을 이해할 수 있다.

2. typedef를 이용하여 새로운 자료형을 정의할 수 있다.

3. 구조체 비트필드를 선언하고 사용할 수 있다.

4. 공용체를 사용할 수 있다.

 

주요용어

typedef : 이미 존재하는 자료형에 새로운 이름을 부여하기 위한 키워드

구조체 비트필드 : 주기억장치의 기억공간을 byte 단위가 아닌 bit 단위로 사용하는 방법

공용체 : 동일한 기억장소에 여러 유형의 자료를 저장하기 위해 정의하는 자료형

 

 

 

7.1.6. 함수와 구조체

 

(1) 구조체를 함수의 매개변수로 사용

- 일반변수를 함수의 매개변수로 사용하는 것과 동일

- 매개변수가 구조체인 경우 함수의 형식매개변수를 구조체로 선언

- 해당 구조체 전체가 복사되기 때문에 편리

- 구조체 전체가 복사되기 때문에 시간이 많이 걸리고, 기억공간의 낭비가 심하다.

 

// 구조체를 함수의 매개변수로 사용 예

#include <stdio.h>
struct num calc(struct num);
struct num{
     int x;
     int y;
     int sum;
     int mul;      };
void main(){
     struct num number1; //구조체 변수 선언
     number1.x = 10;
     number1.y = 20;
     number1 = calc(number1);
//피호출함수 calc()에 struct num형 구조체를 매개변수로 넘겨줌

     printf("x:%d, y:%d, sum:%d mul:%d \n", number1.x, number1.y, number1.sum, number1.mul);      }

struct num calc(struct num number2){

     number2.sum = number2.x +number2.y;

//넘겨받은 struct num형 구조체의 멤버끼리 계산

     number2..mul = number2.x * number2.y;

     return(number2);      } // 구조체를 리턴 

 

- 함수의 원형 정의에 대한 설명
#include <stdio.h>
struct num calc(struct num number2); ---> 함수의 원형 정의
struct num{
............................
   struct calc(struct num number2);
    ↓             
  int 나 char와 같은 일종의 자료형
 int calc(int number2); 와 같은 개념

따라서 struct num calc (struct num number2); 는
반환 자료형이 struct num형인 구조체이고
struct num 형의 구조체를 매개변수로 갖는  함수 calc

 

 

(2) 구조체 포인터를 함수의 매개변수로 사용

- 일반적으로 구조체 포인터를 함수의 매개변수로 사용

- 구조체를 복사하기 않기 때문에 실행속도가 향상되고, 기억공간의 사용효율도 좋다.

 

// 구조체 포인터를 함수의 매개변수로 사용

 

 

 

7.1.7 typedef

>> 이미 존재하는 자료형에 새로운 이름을 붙이기 위한 키워드

      - 간단하거나 의미있ㄴ느 이름으로 바꿀 수 있어 프로그램 이해가 쉽다.

      - 구조체 형을 선언하는데 많이 사용

 

* 형식 : typedef 기존 자료형 새로운 자료형이름;

 

* 사용 예 ; typedef int INT;

 

- typedef 의 사용

 typedef unsigned int BYTE; ---->  unsigned int 형을 BYTE 라는 새로운 이름으로 정의
 BYTE val;                        ---->  컴파일러가 unsigned int val 로 해석


typedef int * PTR;              -----> int * 를 PTR로 재정의

PTR p1, p2;                      -----> int *p1, *p2 를 의미
  

// typedef 의 사용 예1

#include<stdio.h> 

struct data{ 

     int x;

     int y;      };

typedef struct data DATA;    // data형 구조체를 새로운 이름 DATA로 정의

voidmain(){

     DATAd = {1,2};             // struct data d; 와 동일 

     printf("d.x=%d,d.y=%d\n",d.x,d.y);      }          //          결과 : d.x = 1 , d.y =2

 

 

- typedef 을 이용한 구조체 표현의 다른 방법

structdata{ 
     int x;
     int y;
};
typedef struct data DATA;
typedef structdata{ 
     int x;
     int y;
} DATA;    << 구조체 정의와 typedef 선언을 한꺼번에 표현

 

 

반응형
LIST

'방송통신대학 > C 프로그래밍' 카테고리의 다른 글

공용체 union  (0) 2020.06.15
구조체struct 의 비트필드 bit field  (0) 2020.06.14
구조체 배열struct array  (0) 2020.06.12
구조체 struct  (0) 2020.06.11
포인터와 배열 pointer array  (0) 2020.06.10

+ Recent posts