gyumin.log

변수 초기화

🌿 자라는 중

목차

int x = 5;x = 5; - 똑같이 값을 넣는 코드처럼 보이지만, 시험은 이 둘의 이름이 다르다는 걸 집요하게 묻는다. 언제 넣느냐에 따라 이름이 달라진다.

  • 선언 (Declaration): 이름 + 타입만 정함 - int x;
  • 초기화 (Initialization): 처음 만들 때 값을 넣음 - int x = 5;
  • 대입 (Assignment): 이미 있는 변수에 값을 넣음 - x = 10;
  • 리셋 (Reset): 원래 상태로 되돌림 - x = 5; (초기값 복원)

초기화 ≠ 0으로 만들기. int x = 99;도 초기화다. 구분 기준은 하나 - 선언과 붙어 있으면 초기화, 떨어져 있으면 대입.

초기화를 안 하면: 언어마다 운명이 갈린다

언어대상결과
C지역변수 (함수 안)쓰레기값(garbage value)
C전역 / static 변수0 으로 자동 초기화
Java멤버변수 (클래스 안)타입별 기본값 자동
Java지역변수 (메서드 안)컴파일 에러
Python모든 변수선언 문법 없음 → 미대입 사용 시 NameError

쓰레기값은 C 지역변수 한정이다. “C는 무조건 쓰레기값”으로 외우면 틀린다 - 전역과 static은 프로그램 시작 때 0으로 깔린다.

Java 기본값 (멤버변수)

자료형기본값
int long short byte0
double float0.0
char널 문자 ((int) 캐스팅하면 0)
booleanfalse
String · 모든 참조형null

함정은 String - 기본값이 ""(빈 문자열)이 아니라 null이다.

배열 초기화

목적CJavaPython
값 지정int a[3]={1,2,3};int[] a={1,2,3};a=[1,2,3]
크기 생략int a[]={1,2,3};불가 (new 필요)-
전부 0int a[5]={0};int[] a=new int[5];a=[0]*5
모자라게 지정나머지 자동 0--

C에서 모자라게 지정했을 때가 단골 출제 포인트다:

선언[0][1][2][3][4]
int a[5]={3,7};37000
int a[5]={0};00000
int a[5];쓰레기쓰레기쓰레기쓰레기쓰레기

{ }로 한 칸이라도 초기화하면 나머지는 확실히 0. { }가 아예 없으면 전부 쓰레기값.

구조체 초기화 = 멤버 선언 순서

{ } 안의 값은 멤버를 선언한 순서대로 들어간다. 멤버 이름과 무관하다.

struct P { int y; int x; };   // 첫째 y, 둘째 x
struct P p = { 10, 20 };      // y=10, x=20
printf("%d %d", p.x, p.y);    // 20 10
struct Node { struct Node* next; unsigned int x; };
struct Node t1 = { 0, 5u };   // next = NULL, x = 5

0은 포인터 자리에 들어가면 NULL이 된다. 5uu는 unsigned 접미사일 뿐, 값은 그냥 5 → 접미사 이야기는 C 자료형 참고.

정처기 포인트

  • 함정 1: “초기화 = 0으로 만들기” → ✕. 처음 값을 넣는 행위 자체가 초기화. int x = 99;도 초기화다.
  • 함정 2: “C는 초기화 안 하면 쓰레기값” → 지역변수만. 전역·static은 0.
  • 함정 3: Java String 멤버변수 기본값을 ""로 내는 선지 → null이 정답.
  • 함정 4: int a[5]={3,7};에서 a[2] 값을 묻는 문제 → 0 (쓰레기값 아님).
  • 함정 5: 구조체 { } 초기화 값을 멤버 이름 순서가 아니라 선언 순서로 매칭해야 한다.

한 줄: 선언과 붙으면 초기화·떨어지면 대입, C 쓰레기값은 지역변수만, 배열 { }는 부족분 0 채움, 구조체는 선언 순서.

연결되는 것들

  • 쓰레기값이 왜 생기는지는 메모리와 자료형 크기 이야기 → C 자료형
  • 초기화한 값을 화면에 어떻게 찍는지 → C 출력 함수