구조체란 하나 이상의 서로 다른 종류의 변수들을 묶어서 새로운 자료형을 정의하는 것이다.
struct student
{
char name[10];
int age;
int height;
};
[구조체 변수명].[구조체 멤버]
st1.name
멤버에 접근시 .
을 사용하는데, 이를 직접접근이라고 한다.
#include <stdio.h>
#include <string.h>
struct student
{
char name[10];
int age;
int height;
}st1;
int main(void)
{
strcpy(st1.name, "James");
st1.age = 25;
st1.height = 178;
printf("이름 = %s, 나이 = %d, 키 = %d\n", st1.name, st1.age, st1.height);
return 0;
}
이름 = James, 나이 = 25, 키 = 178
소스파일 -(전처리)> 전처리파일 -(컴파일)> 목적파일 -(링크)> 실행파일
#
이 붙은 전처리문은 컴파일러에서 처리하지 않고, 전처리기에서 처리된다.
전처리기 지시자의 종류
#include
#define
#ifdef
#define
전처리기 지시자를 사용하여 매크로를 사용
#include <stdio.h>
#define PI 3.14
int main(void)
{
double area;
double radius;
fputs("반지름을 입력하시오 :", stdout);
scanf("%lf", &radius);
area = radius * radius * PI;
printf("원의 넓이는 %lf입니다.\n", area);
return 0;
}
반지름을 입력하시오 :30
원의 넓이는 2826.000000입니다.
매크로 상수를 배열 선언 시 배열의 길이로 사용할 수 있다.
#include <stdio.h>
#define SIZE 5
int main(void)
{
char str[SIZE] = "LOVE";
int i;
for(i = 0; i < SIZE; i++)
{
printf("배열의 요소 %d은 %c\n",i , str[i]);
}
return 0;
}
배열의 요소 0는 L
배열의 요소 1는 O
배열의 요소 2는 V
배열의 요소 3는 E
배열의 요소 4는
이미 선언한 매크로를 또 다른 매크로에서 사용할 수 있다.
#include <stdio.h>
#define A 5
#define B A + 10
int main()
{
printf("A = %d\n", A);
printf("B = %d\n", B);
printf("B * 2 = %d\n", B * 2);
return 0;
}
A = 5
B = 15
B * 2 = 25
생각대로라면 B * 2
가 30이 나와야 하지만, 컴파일러는 단순치환 하여 A + 10 * 2
로 인식하기 때문에, 25가 나온다. 이를 방지하기 위해 괄호를 사용한다.
#include <stdio.h>
#define A 5
#define B (A + 10)
int main()
{
printf("A = %d\n", A);
printf("B = %d\n", B);
printf("B * 2 = %d\n", B * 2);
return 0;
}
A = 5
B = 15
B * 2 = 30
자료형에 독립적이고 함수의 경우처럼 루틴을 호출하는 것이 아닌 단순 치환하는 것이므로 더욱 빠르지만, 복잡해지는 경우 쓰지 않는 것이 좋다.