[C++] printf() 함수
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 |