분류 전체보기 40

포인터 배열

포인터 배열이란?int *p[5];이 선언의 의미는 다음과 같습니다:“정수형(int)을 가리킬 수 있는 포인터 변수 5개를 배열로 선언한다.”p는 배열입니다.p[0], p[1], ..., p[4]는 각각 int형을 가리킬 수 있는 포인터 변수입니다.즉, p[0], p[1], p[2] … 하나하나가 다음선언과 같습니다:int *p0;int *p1;int *p2;...→ 이들을 하나의 배열로 묶은 것이 int *p[5];입니다. 포인터 배열과 일반 배열의 차이일반 배열:int arr[5]; // 정수형 5개짜리 배열포인터 배열:int *p[5]; // int형 포인터 5개짜리 배열일반 배열은 값을 저장포인터 배열은 주소(다른 변수를 가리키는 주소)를 저장 포인터 배열의 동작 방식예시 코드:int a = 3;..

C 2025.06.13

다중 포인터

포인터 한 단계int a = 5; int *p = &a;a정수형 변수, 값은 5p포인터 변수, a의 주소를 저장함 (p = &a)*pp가 가리키는 곳의 값을 참조 → 즉 *p = a = 5 이중 포인터int **p2 = &p;p2는 포인터의 포인터입니다.p2는 p의 주소를 저장합니다. 즉, p2가 가리키는 대상은 포인터 p입니다.p2p의 주소*p2a의 주소**p25 삼중 포인터int ***p3 = &p2;p3는 포인터의 포인터의 포인터입니다.p3는 p2의 주소를 저장합니다.p3p2의 주소*p3p의 주소**p3a의 주소***p35 a → 5p → &ap2 → &pp3 → &p2화살표는 “가리킴”을 의미합니다.박스 구조로 변수들이 메모리에서 가리키는 관계를 시각화한 것입니다.예시 ..

C 2025.06.13

배열을 함수에 전달할때 동작방식

배열을 함수에 전달하는 기본 구조int arr[5] = {5, 6, 7, 8, 9};fun(arr);이 코드를 보면 우리가 arr을 fun() 함수에 전달했다고 말하지만, 사실은 "배열 전체"를 넘긴 것이 아닙니다.❗ 중요한 사실: 배열은 절대 통째로 함수로 "복사되어" 넘어가지 않습니다. 배열의 이름 arr은 무엇인가?arr은 배열의 이름인데, 이름 그 자체가 배열의 첫 번째 원소의 주소를 나타내는 포인터입니다.즉, 다음이 성립합니다:arr == &arr[0] // 배열의 시작 주소따라서 fun(arr);는 실제로는fun(&arr[0]); // 배열의 첫 번째 원소 주소를 전달이라는 의미입니다. 함수 쪽에서 받는 방법void fun(int *p) 배열의 주소가 넘어오기 때문에, 받는 쪽에서는 반드시 ..

C 2025.06.13

배열과 포인터

배열과 포인터의 기본 개념">배열과 포인터의 기본 개념 int a[5] = {1, 2, 3, 4, 5}; 라는 코드의 의미이 코드는 메모리에 정수형 데이터 5개짜리 배열을 선언하고 초기화한 것입니다.메모리 구조 (예시)주소: 100 104 108 112 116 ↓ ↓ ↓ ↓ ↓배열: a[0] a[1] a[2] a[3] a[4]값: 1 2 3 4 5C에서 int는 보통 4바이트입니다. 따라서 메모리 주소도 4씩 증가합니다. 배열의 이름은 무엇인가?배열 a의 이름은 그 배열의 시작 주소를 의미합니다.a == &a[0]a는 포인터가 아닙니다. 배열 이름은 포인터처럼 행동하는 상수입니다.즉, a는 배열의 첫 번째 원소 a..

C 2025.06.13

Call by Value vs Call by Address

함수의 인수 전달 기본 원리 – Call by Value (값 전달) int main() { int a = 3; int b = 5; swap(a, b); printf("%d %d", a, b); // 결과: 3 5 return 0;}void swap(int x, int y) { int temp; temp = x; x = y; y = temp;} a = 3, b = 5는 정수형 변수입니다. 메모리에 각각 4바이트 공간을 차지하며, 3과 5가 저장됩니다.swap(a, b)를 호출하면 a와 b의 값이 swap() 함수에 전달됩니다.함수 정의 void swap(int x, int y)는 x와 y를 새롭게 선언하여 a, b의 값을 복사받습니다.즉, a → x, b..

C 2025.06.13

포인터의 크기와 자료형이 중요한 이유

포인터의 크기: 왜 int*도 double*도 8바이트일까?현재 대부분의 컴퓨터는 64비트 시스템입니다.이 시스템에서는 메모리 주소가 64비트(8바이트)로 표현됩니다.즉, 포인터는 어떤 자료형이든 주소만 저장하기 때문에포인터 변수 자체는 모두 8바이트입니다.int a = 10; double d = 3.14; int *p = &a; // p: 8바이트 double *q = &d; // q: 8바이트→ p와 q 모두 8바이트입니다. 이유는: 주소를 저장하기 때문입니다. 그런데 왜 int*와 double*처럼 자료형을 맞춰야 할까? 포인터는 주소만 저장합니다.하지만 그 주소에 몇 바이트를 읽을 것인지는 자료형에 따라 다릅니다.예를 들어:int a = 5; int *p = &a;*p라고 하면, 컴파일러는 p가 ..

C 2025.06.13

역참조와 *연산자

C언어에서 * 기호는 세 가지 용도로 사용됩니다:곱하기 연산자 (예: 2 * 3)포인터 변수 선언 (예: int *p)포인터의 역참조 (예: *p)즉, 문맥에 따라 의미가 달라집니다.바로 이 점 때문에 많은 분들이 헷갈리곤 합니다. *를 이용한 포인터 선언과 역참조의 차이 👉 포인터 선언: int *p;이때 *는 포인터 변수임을 나타내는 기호입니다.해석: p는 int형 데이터를 가리키는 포인터입니다.예시:int a = 5;int *p = &a; // p는 a의 주소를 저장함이 선언에서 *는 "p는 int형 포인터다"라는 의미입니다. 👉 역참조: *p이때 *는 포인터가 가리키는 곳에 접근한다는 뜻입니다.해석: p가 가리키는 주소에 들어있는 값을 가져옵니다.예시:int a = 5;int *p = &a;p..

C 2025.06.13

포인터

포인터는 값이 아닌 주소를 저장하는 변수입니다.즉, 어떤 변수의 실제 값을 저장하지 않고,그 값이 어디에 저장되어 있는지(주소)를 저장합니다. 왜 주소를 저장할까요?변수 a에 저장된 값을 직접 사용할 수도 있지만,때로는 그 값이 저장된 위치(주소)를 이용해야 할 필요가 있습니다.예를 들어, 아래와 같은 코드가 있습니다.int a = 5;int *p = &a;이 코드의 의미는 다음과 같습니다:int a = 5; → 정수형 변수 a를 만들고 값으로 5를 저장합니다.&a → 변수 a의 주소를 가져옵니다. 예를 들어 a가 1000번지에 저장되어 있다면, &a는 1000입니다.int *p → 정수형 변수를 가리킬 수 있는 포인터 변수 p를 선언합니다.p = &a; → 변수 a의 주소를 포인터 p에 저장합니다.즉,..

C 2025.06.13

변수와 메모리

변수란? 변수는 컴퓨터 메모리에 어떤 값을 저장해 두기 위한 이름입니다.쉽게 말하면, 값을 보관하는 상자와 같습니다.예를 들어 아래와 같은 코드가 있다고 가정하겠습니다.int a = 5;이 뜻은 다음과 같습니다:a라는 이름의 상자를 만든다.그 상자 안에는 정수 5를 넣는다.이 상자는 정수를 담는 상자이기 때문에, int 자료형을 사용한다. 메모리란? 컴퓨터 메모리는 아주 많은 작은 칸(셀)들로 이루어져 있으며,각 칸은 1바이트(Byte) 크기를 가지고 있습니다.이 칸 하나하나에는 고유한 주소(번호)가 붙어 있습니다.예를 들어:주소 | 내용-------------1000 | ?1001 | ?1002 | ?1003 | ?변수를 만들면, 이 메모리 칸들 중 일부를 사용하게 됩니다. 일반적으로..

C 2025.06.13

프로세스 - 2

이화여자대학교 반효경 교수님의 운영체제 강의를 정리한 글입니다.먼저, 스케줄러(scheduler)란?운영체제는 CPU와 메모리 같은 자원을 누구에게 언제 얼마나 줄 것인지를 결정해야 합니다.이 일을 맡는 것이 스케줄러입니다.스케줄러는 크게 3종류가 있습니다:장기 스케줄러 (long-term)어떤 프로세스를 메모리에 올릴지 결정프로세스가 처음 만들어질 때중기 스케줄러 (mid-term)메모리에서 어떤 프로세스를 잠시 내릴지 결정메모리가 부족해질 때단기 스케줄러 (short-term)어떤 프로세스에게 CPU를 줄지 결정매우 자주 (타이머 인터럽트 등) 프로세스 상태(1) NEW → READY사용자가 어떤 프로그램을 실행하면, 프로세스가 만들어집니다.이 상태를 NEW 상태라고 합니다.NEW 상태의 프로세..

OS 2025.06.13