printf() 함수와 서식문자, 변수와 메모리의 이해


C언어에서 가장 많이 사용하는 출력 함수가 printf다. 이번 시간에는 printf 함수의 다양한 서식문자(%d, %g, %c 등)와 변수와 메모리의 관계, 그리고 실제로 데이터를 어떻게 저장하고 출력하는지 실습 예제와 함께 자세히 알아본다.

1. printf() 함수와 서식문자

  • printf 함수는 화면에 문자열, 정수, 실수, 문자 등 다양한 형태의 데이터를 출력한다.
  • 서식문자는 %로 시작하며, 출력할 데이터의 타입에 따라 다르게 사용한다.
  • 문자열은 큰따옴표(" ")로, 문자 하나는 홑따옴표(' ')로 감싼다.
  • \n은 줄바꿈(new line), \t는 탭(tab) 등 특수문자도 함께 쓸 수 있다.

2. 주요 서식문자와 사용 예시

서식문자 의미 예시 출력 결과
%d 10진수 정수 printf("%d", 100); 100
%g, %f 실수(부동소수점) printf("%g", 5.5); 5.5
%c 문자 1개 printf("%c", 65); A (아스키코드 65)
%s 문자열 printf("%s", "Hello"); Hello
%% % 기호 출력 printf("100%%"); 100%
  • 정수는 %d, 실수는 %g 또는 %f, 문자는 %c, 문자열은 %s를 사용한다.
  • 실수형 데이터를 %d로 출력하면 0이 나오거나 이상한 값이 나올 수 있으니, 반드시 데이터형에 맞는 서식문자를 사용해야 한다.

3. 변수와 메모리의 관계

  • 변수는 데이터를 저장하는 메모리 공간이다. 선언할 때 데이터형을 함께 지정한다.
  • int a; // 정수형 변수 a 선언 (메모리 공간만 확보)
  • a = 10; // 변수 a에 10을 저장 (2진수로 변환되어 메모리에 저장)
  • int a = 10; // 선언과 동시에 초기화
  • 변수에 값을 넣을 때는 = (대입 연산자)를 사용한다. 오른쪽 값을 왼쪽 변수에 저장한다.
  • 하나의 변수는 한 번만 선언해야 하며, 같은 이름의 변수를 중복 선언하면 오류가 발생한다.

4. 데이터의 연산과 출력

  • printf 함수의 인자(괄호 안)는 연산이 가능하다. 예를 들어, printf("%d", a+1);처럼 변수의 값을 연산해서 출력할 수 있다.
  • 문자열 내의 +, =, * 등은 연산이 아니라 문자 그대로 출력된다.
  • 실제 연산은 괄호 밖에서 이루어지고, 결과만 출력된다.

5. 아스키코드와 문자 출력

  • 아스키코드는 문자와 숫자를 컴퓨터가 인식할 수 있는 2진수 코드로 변환한 표준이다.
  • 예를 들어, 65를 %c로 출력하면 문자 A가 나온다.
  • 아스키코드는 문자, 숫자, 특수문자, 제어문자 등 다양한 기호를 7비트(8비트 포함)로 표현한다.
  • 패리티 비트는 데이터 전송 시 오류 검출을 위해 1의 개수를 짝수(또는 홀수)로 맞추는 방식이다.

6. 변수 선언, 대입, 메모리 저장 예시

코드 설명
int a; 정수형 변수 a 선언(메모리 공간만 확보)
a = 10; 변수 a에 10을 저장(2진수 변환 후 저장)
int b = 50; 선언과 동시에 50 저장
printf("%d", a); 변수 a의 값을 정수로 출력
printf("%d", b+1); 변수 b의 값에 1을 더해 출력(연산 가능)

7. 주요 용어 정리

  • 서식문자(conversion specifier): 출력 데이터의 형식을 지정하는 기호(%d, %f, %c 등)
  • 변수(variable): 데이터를 저장하는 메모리 공간
  • 데이터형(data type): 변수에 저장되는 값의 종류(int, double, char 등)
  • 아스키코드(ASCII): 문자와 숫자를 2진수로 변환하는 표준 코드
  • 패리티 비트(parity bit): 데이터 전송 오류 검출용 비트

정리

printf 함수에서 서식문자를 올바르게 사용하는 것이 C언어 출력의 핵심이다. 변수는 메모리 공간과 데이터형을 반드시 선언해야 하며, 데이터의 타입에 따라 서식문자를 맞춰야 원하는 결과를 얻을 수 있다. 아스키코드와 메모리 저장 방식, 연산과 출력의 차이까지 이해하면 C언어의 기초 로직과 데이터 흐름을 명확히 파악할 수 있다.
728x90

'C++' 카테고리의 다른 글

[C++] scanf() 함수  (0) 2025.05.07
C++의 프로그램 구조  (0) 2025.05.01