728x90

C언어는 프로그래밍 언어 중에서도 가장 기본적인 언어 중 하나입니다. 이 언어를 이용하면 컴퓨터 시스템을 제어하고, 프로그램을 작성할 수 있습니다. C언어의 기초문법을 자세히 설명해보겠습니다.

주석

주석은 프로그램에서 설명을 위해 사용되는 부분으로, 컴파일러에 의해 무시됩니다. 주석은 다음과 같은 두 가지 형태로 작성됩니다

// 한 줄 주석


/*
여러 줄 주석
*/

변수

C언어에서는 변수를 사용하여 값을 저장하고, 이를 다른 곳에서 사용할 수 있습니다. 변수는 다음과 같은 형식으로 선언됩니다.

데이터_타입 변수_이름;
ex) int a;

여기서 데이터_타입은 변수에 저장될 값의 타입을 의미하며, 변수_이름은 변수의 이름을 의미합니다. 예를 들어, 다음과 같이 int 타입의 변수 x를 선언할 수 있습니다.

int x;


int x = 10;

또한, 변수를 선언과 동시에 초기화할 수 있습니다. 예를 들어, 다음과 같이 int 타입의 변수 x를 선언과 동시에 10으로 초기화할 수 있습니다.

int x = 10;

연산자

C언어에서는 다양한 연산자를 사용하여 계산을 수행할 수 있습니다. 이 중에서 대표적인 연산자들을 설명하겠습니다.

산술 연산자

산술 연산자는 다음과 같습니다.

연산자설명

+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
% 나머지

대입 연산자

대입 연산자는 다음과 같습니다.

연산자설명

= 대입 연산자
+= 덧셈 후 대입
-= 뺄셈 후 대입
*= 곱셈 후 대입
/= 나눗셈 후 대입
%= 나머지 후 대입

비교 연산자

비교 연산자는 다음과 같습니다.

연산자설명

== 같은지 비교
!= 다른지 비교
> 큰지 비교
>= 크거나 같은지
< 작은지 비

배열

C언어에서는 배열을 사용하여 여러 개의 데이터를 하나의 변수에 저장할 수 있습니다. 배열은 다음과 같이 선언됩니다.

데이터_타입 배열_이름[배열_크기];

여기서 데이터_타입은 배열에 저장될 데이터의 타입을 의미하며, 배열_이름은 배열의 이름을 의미합니다. 또한, 배열_크기는 배열의 크기를 의미합니다. 예를 들어, 다음과 같이 int 타입의 5개의 원소를 가진 배열 arr을 선언할 수 있습니다.

int arr[5];

배열의 각 원소는 다음과 같이 인덱스를 이용하여 접근할 수 있습니다.

arr[0] = 10;
arr[1] = 20;

조건문

C언어에서는 조건문을 사용하여 프로그램의 흐름을 제어할 수 있습니다. 조건문은 다음과 같이 작성됩니다.

if (조건식) {
  // 조건식이 참일 경우 실행될 코드
} else {
  // 조건식이 거짓일 경우 실행될 코드
} 

여기서 조건식은 참 또는 거짓을 판단할 수 있는 식을 의미합니다. 예를 들어, 다음과 같이 x가 10보다 크면 "x is greater than 10"을 출력하고, 그렇지 않으면 "x is less than or equal to 10"을 출력하는 코드를 작성할 수 있습니다.

int x = 15;
if (x > 10) {
  printf("x is greater than 10");
} else {
  printf("x is less than or equal to 10");
}

반복문

C언어에서는 반복문을 사용하여 동일한 코드를 여러 번 실행할 수 있습니다. C언어에서는 for문과 while문이 가장 일반적으로 사용됩니다.

for문

for문은 다음과 같이 작성됩니다.

for (초기화; 조건식; 증감식) {
  // 조건식이 참일 경우 실행될 코드
}

여기서 초기화는 반복문이 시작될 때 한 번만 실행되는 코드를 의미합니다. 조건식은 반복문이 실행될 조건을 의미하며, 이 조건식이 참이면 반복문이 계속해서 실행됩니다. 증감식은 반복문이 실행된 후에 실행되는 코드를 의미합니다.

 

포인터

포인터(pointer)는 C언어에서 가장 중요한 개념 중 하나입니다. 포인터는 메모리 주소를 가리키는 변수로, 포인터를 이용하면 메모리 주소를 직접 조작할 수 있습니다.

포인터는 다음과 같이 선언됩니다.

데이터_타입 *포인터_변수_이름;

예를 들어, int형 포인터 ptr을 선언하려면 다음과 같이 작성합니다.

int *ptr;

포인터 변수에는 다음과 같이 메모리 주소를 할당할 수 있습니다.

int num = 10;
int *ptr = &num; // ptr 변수에 num 변수의 주소를 할당

포인터 변수를 이용하여 해당 메모리 주소에 저장된 값을 가져오거나 변경할 수 있습니다.

int num = 10;
int *ptr = &num; // ptr 변수에 num 변수의 주소를 할당
*ptr = 20; // num 변수의 값을 20으로 변경

구조체

구조체(struct)는 여러 개의 변수를 묶어서 하나의 변수로 만드는 자료형입니다. 구조체는 다음과 같이 정의됩니다.

struct 구조체_이름 {
  데이터_타입 멤버_변수_이름1;
  데이터_타입 멤버_변수_이름2;
  ...
};

예를 들어, 다음과 같이 Person이라는 구조체를 정의할 수 있습니다.

struct Person {
  char name[20];
  int age;
};

위의 구조체를 사용하여 변수를 선언할 수 있습니다.

struct Person p1;

구조체 멤버 변수에 접근할 때는 다음과 같이 작성합니다.

p1.age = 20;

동적 메모리 할당

동적 메모리 할당(dynamic memory allocation)은 프로그램 실행 중에 메모리를 할당하는 방법입니다. 동적 메모리 할당을 사용하면 프로그램의 유연성을 높일 수 있습니다.

동적 메모리 할당은 다음과 같은 함수를 사용하여 수행할 수 있습니다.

void *malloc(size_t size);

위의 함수는 메모리 블록을 할당하고, 할당된 메모리 블록의 주소를 반환합니다. size 매개변수는 할당할 메모리 블록의 크기를 지정합니다.

할당된 메모리 블록을 사용한 후에는 다음과 같은 함수를 사용하여 메모리를 해제해야 합니다.

void free(void *ptr);
728x90

+ Recent posts