c프로그래밍 10

[C언어] 10. 구조체와 동적할당

배열은 "같은 자료형"만 묶을 수 있었다. 하지만 학생 한 명은 학번(정수), 이름(문자열), 학점(실수)처럼 서로 다른 자료형의 정보로 이뤄진다. 이렇게 여러 자료형을 하나로 묶어 새 자료형을 만드는 것이 구조체다. 여기에 실행 중 메모리를 빌리는 동적 할당까지 더하면, 마침내 연결 리스트 같은 자료구조를 만들 수 있다.1. 구조체 (Structure)구조체(Structure)서로 다른 자료형의 여러 변수를 하나로 묶어 새로운 자료형을 정의하는 문법이다. 관련 있는 데이터를 한 덩어리로 다룰 수 있게 해준다. struct student { int number; // 학번 char name[10]; // 이름 double grade; // 학점};struct 키워드로 정의를 ..

language/c 2026.09.07

[C언어] 09. 포인터 (Pointer)

포인터는 C언어를 어렵게 만드는 동시에 강력하게 만드는 핵심 개념이다. 나도 여기서 한 번 막혔는데, 사실 한 문장으로 요약된다. 포인터는 값이 아니라 "값이 있는 주소"를 담는 변수다.지금까지 scanf에서 &를 붙였던 것, 배열 이름이 곧 주소였던 것이 모두 이 포인터로 이어졌다.1. 포인터란?모든 변수는 메모리 어딘가에 저장되고, 그 위치를 가리키는 주소를 갖는다.포인터(Pointer)다른 변수의 주소를 저장하는 변수다. 일반 변수가 "값"을 담는다면, 포인터는 "그 값이 사는 집 주소"를 담는다. 그래서 어떤 타입을 가리키든 포인터 자체의 크기는 일정하다(주소는 결국 하나의 정수이므로).두 개의 핵심 연산자가 있다.주소 연산자 &: 변수의 주소를 구한다. &i는 변수 i의 주소.간접 참조(역참조)..

language/c 2026.08.31

[C언어] 08. 문자열 (String)

[C언어] 08. 문자열 (String)다른 언어에는 문자열 타입이 따로 있지만, C에는 없다. C에서 문자열은 문자(char)들의 배열이다. 이 단순한 사실에서 C 문자열의 모든 특징과 주의점이 나온다는 걸 오늘 정리하며 알았다.1. 문자열과 NULL 문자문자열은 문자들이 죽 늘어선 것이고, 문자 배열(char[])에 저장한다. 그런데 배열만으로는 "어디까지가 문자열인지" 알 수 없다. 그래서 C는 문자열의 끝에 특별한 표식을 둔다. NULL 문자 '\0'이 문자열의 끝을 표시한다모든 C 문자열은 끝에 NULL 문자('\0')가 붙는다. printf나 strlen 같은 함수는 이 '\0'을 만날 때까지를 하나의 문자열로 인식한다. 즉 "abc"는 사실 a, b, c, '\0' 네 글자가 저장된 것이다...

language/c 2026.08.24

[C언어] 07. 배열 (Array)

학생 10명의 점수를 다루려고 변수 10개를 따로 선언하면, 합계를 구할 때 10번 더해야 하고 인원이 바뀌면 코드를 전부 고쳐야 한다. 배열은 같은 종류의 데이터 여러 개를 하나의 이름으로 묶어, 이런 번거로움을 없애준다.1. 배열이란?배열(Array)같은 자료형의 데이터 여러 개를 하나의 변수 이름으로 묶어 관리하는 자료구조다. 각 데이터는 0부터 시작하는 인덱스(index)로 구별하며, 크기는 고정되고 메모리의 연속된 공간에 저장된다.int scores[10]; // int형 10개짜리 배열scores[0]부터 scores[9]까지 10개의 요소가 만들어진다. 인덱스가 0부터 시작하므로, 크기가 10인 배열의 마지막 인덱스는 9다. 이걸 놓쳐 scores[10]에 접근하면 배열 범위를 벗어나는 ..

language/c 2026.08.17

[C언어] 06. 함수 (Function)

프로그램이 커지면 같은 코드가 여기저기 반복되고, 전체를 한눈에 파악하기 어려워진다. 함수는 특정 기능을 하나의 덩어리로 묶어 이름을 붙인 것으로, 이 문제를 푸는 핵심 도구다. 우리가 이미 써 온 printf, scanf도 모두 함수였다.1. 함수란?함수(function)특정 작업을 수행하는 명령어들의 묶음으로, 고유한 이름을 가지며 입력(인수)을 받아 결과(반환값)를 돌려줄 수 있다.함수를 쓰면 좋은 점은 분명했다.중복 제거: 같은 코드를 반복하지 않고 한 번 정의해 여러 번 호출한다.재사용: 한 번 잘 만든 함수는 다른 프로그램에서도 쓸 수 있다.모듈화: 프로그램을 기능 단위로 나눠, 개발과 유지보수가 쉬워진다.함수는 크게 우리가 직접 만드는 사용자 정의 함수와, 표준 라이브러리가 제공하는 라이브러..

language/c 2026.08.10

[C언어] 05. 반복문

같은 작업을 여러 번 해야 할 때, 코드를 여러 번 복사하는 대신 반복문을 쓴다. "1부터 100까지 더하기"를 덧셈 100줄로 쓰지 않고 몇 줄로 끝내는 것이다. C의 반복문에는 while, do~while, for 세 가지가 있다. 종류특징while조건이 참인 동안 반복 (반복 횟수를 모를 때)do ~ while일단 한 번 실행한 뒤 조건 검사 (최소 1회 보장)for정해진 횟수만큼 반복1. while 문조건이 참인 동안 중괄호 안을 반복한다. 조건을 먼저 검사하므로, 처음부터 거짓이면 한 번도 실행되지 않는다(0번 이상).while (조건) { 수행 문장;} 반복 횟수를 미리 알 수 없을 때(예: "0이 입력될 때까지") 적합하다.int n;while (1) { /..

language/c 2026.08.03

[C언어] 04. 조건문

지금까지의 프로그램은 위에서 아래로 한 줄씩 차례대로 실행됐다. 하지만 실제 프로그램은 "조건에 따라 다르게" 동작해야 한다. 이렇게 실행 흐름을 바꾸는 문장을 제어문이라 하고, 그중 조건에 따라 갈래를 나누는 것이 조건문이다.0. 제어 구조의 세 가지 형태 구조설명순차 구조위에서 아래로 차례대로 실행선택 구조조건에 따라 실행할 문장을 선택 (조건문)반복 구조조건이 참인 동안 문장을 반복 (반복문) 모든 프로그램은 이 세 구조의 조합으로 만들어진다. 이 글에서 다루는 건 가운데의 선택 구조다.1. if 문if는 조건식이 참일 때만 중괄호 안의 문장을 실행한다.if (조건식) { 조건이 참일 때 수행할 문장;} int iNo = 10;if (iNo > 0) { printf("양수입니다.\n");..

language/c 2026.07.27

[C언어] 03. 수식과 연산자

프로그램이 하는 일의 대부분은 값을 계산하고 비교하고 조합하는 것이다. 이 모든 연산을 담당하는 것이 연산자다. 오늘은 산술·증감·관계·논리 연산자부터, 내가 자주 헷갈린 형변환과 연산 우선순위까지 정리했다.1. 산술 연산자기본 사칙연산과 나머지 연산이 있다.연산자의미예 (a=7, b=2)+덧셈a + b → 9-뺄셈a - b → 5*곱셈a * b → 14/나눗셈a / b → 3 (정수 나눗셈)%나머지a % b → 1 정수끼리의 나눗셈은 소수점이 버려진다7 / 2 는 3.5가 아니라 3이다. 정수끼리 계산하면 결과도 정수가 되어 소수 이하가 잘리기 때문이다. 실수 결과가 필요하면 한쪽을 실수로 만들어야 한다(7.0 / 2 → 3.5). 이 함정은 뒤의 형변환에서 다시 다룬다.2. 증감 연산자++, --는 ..

language/c 2026.07.20

[C언어] 02. 기본 변수와 입력

프로그램은 결국 데이터를 다루는 일이고, 그 데이터를 담는 그릇이 변수다. 오늘은 변수가 무엇이고 어떻게 선언·저장·출력하는지, 그리고 사용자에게서 값을 입력받는 scanf까지 정리했다.1. 변수와 자료형변수란?프로그램이 사용하는 데이터를 일시적으로 저장하기 위한 메모리 공간이다. 변수에는 값, 이름, 자료형(크기), 주소가 따라붙는다.C에서 변수는 쓰기 전에 반드시 자료형과 함께 선언해야 한다. 선언은 "이런 타입의 변수를 쓰겠다"고 컴파일러에 미리 알리는 일이고, 컴파일러는 이를 보고 알맞은 크기의 메모리를 확보한다.대표적인 자료형은 정수형 int, 실수형 double, 문자형 char 등이다. (참고로 C에는 원래 논리형 bool이 따로 없어, 정수 0/1로 참거짓을 표현했다.) 변수 이름(식별자)..

language/c 2026.07.10

[C언어] 01. 첫 프로젝트

모든 프로그래밍 언어 학습은 화면에 "Hello World"를 띄우는 것에서 시작한다. 단순해 보이는 이 한 줄짜리 프로그램에도 사실 C언어의 기본 골격이 모두 담겨 있다.이 글에서는 첫 프로그램을 작성해보고, 그 안에 들어 있는 구성요소(헤더, main 함수, 전처리기, 주석)가 각각 무슨 역할을 하는지 하나씩 짚어본다.1. 첫 프로그램: Hello World#include int main(void){ printf("Hello World! \n"); printf("Kim ChulSoo \n"); return 0;}실행하면 다음과 같이 출력된다.Hello World!Kim ChulSooprintf 끝의 \n은 줄바꿈 문자다. 화면에서 커서를 다음 줄로 옮겨, 두 문장이 각각 다른 줄에 출..

language/c 2026.06.28