07. 공용체 (Union)
·
프로그래밍 언어/C
✅ union이란?union은 여러 멤버가 동일한 메모리 공간을 공유하는 사용자 정의 자료형이다.구조체와 문법은 유사하지만, 메모리 사용 방식이 다르다.📦 메모리 구조union Data { int i; float f; char c;};위 예제에서 i, f, c는 모두 같은 메모리 공간을 공유한다.즉, 한 번에 하나의 값만 저장할 수 있으며, 하나의 멤버에 값을 쓰면 나머지 멤버의 값은 덮어씌워져 손상된다.🔹 메모리 사용 예시 (32비트 시스템)union Data { int i; // 4 byte float f; // 4 byte char c; // 1 byte};union의 전체 크기: 가장 큰 멤버의 크기 → 4byte멤버공유 메모리 영역 (4바..
06. 구조체 (Struct)
·
프로그래밍 언어/C
✅ 구조체란?C 언어에서 구조체(struct)는 여러 자료형을 하나로 묶은 사용자 정의 자료형이다.이는 멤버들의 자료형과 순서에 따라 구조체의 실제 메모리 크기가 달라질 수 있다.그 이유는 정렬(Alignment)과 패딩(Padding) 때문이다.📌 구조체의 메모리 정렬(Alignment)CPU는 성능을 위해 메모리에 데이터를 자료형에 맞게 정렬해서 저장하길 원한다.자료형 크기(byte) 정렬 기준char11바이트 정렬short22바이트 정렬int44바이트 정렬double88바이트 정렬📌 정렬 기준이란?→ 데이터는 자신의 정렬 단위의 배수인 주소에 저장되어야 함🧱 구조체 내부의 패딩(Padding)서로 다른 크기의 멤버가 순서대로 배치되면,정렬 기준을 맞추기 위해 중간에 빈 공간(Padding)이 ..
05. 함수 포인터 (Function pointer)와 void 포인터
·
프로그래밍 언어/C
✅ 함수 포인터 (Function Pointer)함수 이름도 배열 이름처럼 주소를 의미한다.즉, 함수의 이름은 해당 함수가 저장된 메모리 공간의 시작 주소를 의미하며,함수를 가리키는 포인터를 선언하고 사용할 수 있다.📌 선언 방법int Function(int a, int b); // 함수 선언int (*fptr)(int, int) = Function; // 함수 포인터 선언 및 초기화📌 함수 호출 방식int result = fptr(10, 5); // 함수 호출// 또는 (*fptr)(10, 5); 도 가능 🔹 함수 포인터를 사용하면 콜백 함수, 배열 내 함수 테이블, 동적 함수 선택 등에 활용할 수 있다. ✅ void 포인터 (Void Pointer)void *ptr;void 포인터는 ..
04. 포인터와 문자열
·
프로그래밍 언어/C
🧠 포인터와 문자열🧩 포인터는32비트 시스템에서는 4바이트를 가지며,64비트 시스템에서는 8바이트 크기를 가진다.🧵 문자열(String)은 끝에 '\0'이라는 널 문자(null character)를 포함한다.🔒 포인터가 가리키는 값은 변경 가능하지만, 배열 이름은 포인터 상수이기 때문에 그 값을 변경할 수 없다.🔍 문자열 선언 방식의 차이🧱 배열 방식char str1[] = "My string"; // str1은 포인터 상수 (주소 값 변경 X)char * const str2 = str1; // 위와 동일📦 문자열 "My string"이 배열로 복사되어 저장됨str은 배열 이름이며, 해당 문자열 데이터를 직접 포함✅ 각 문자는 수정 가능 (예: str[0] = 'm';)❌ str은 포인터 ..