수업 포인터 - Hwanghyewon06/c- GitHub Wiki


#include <stdio.h> 

C 표준 입출력 함수들을 사용하기 위한 헤더파일입니다.

예: printf 함수 사용 가능해짐.

void ResetData(int* p) void ResetData(int* p) { *p = 0; } 

목적: 정수형 변수의 값을 0으로 초기화합니다.

매개변수: 정수형 변수의 주소(int* p)를 전달받음.

*p = 0; 은 포인터 p가 가리키는 메모리 위치의 값을 0으로 만든다는 의미.

즉, 함수 외부에 있는 변수도 이 함수를 통해 변경 가능 (Call by reference 방식).

void PrintData(int data) void PrintData(int data) { printf("data : %d\n", data); } 

목적: 정수형 값을 콘솔에 출력.

매개변수: 단순 정수 값 (int data)

printf를 통해 "data : 값" 형태로 출력됨.

이 함수는 포인터를 사용하지 않고 값 자체만 사용 (Call by value).

void IncrementData(int* p) void IncrementData(int* p) { *p = *p + 1; } 

목적: 정수형 변수의 값을 1 증가시킵니다.

매개변수: 정수형 변수의 주소 (int* p)를 전달받음.

*p = *p + 1; 은 현재 값에 1을 더한 값을 다시 저장.

즉, 변수 자체가 변경됨.

void SetData(int* p, int data) void SetData(int* p, int data) { *p = data; } 

목적: 특정 값을 변수에 저장합니다.

매개변수:

int* p: 값을 저장할 변수의 주소

int data: 저장할 값

*p = data; 는 p가 가리키는 변수에 data 값을 넣음.

이 역시 외부 변수에 영향을 줍니다.

핵심 요약: 

이 코드들은 포인터(int* p)를 사용해 함수 안에서 외부 변수의 값을 직접 변경할 수 있게 만든 예제입니다.

포인터를 통해 접근하면 원래 변수의 값도 바뀌고, 단순 값 전달일 경우에는 변수 원본은 변하지 않습니다.


📌 함수들 설명

void ResetData(int* p)
{
	*p = 0;
}
포인터 p가 가리키는 변수의 값을 0으로 초기화해줍니다.


void PrintData(int data)
{
	printf("data : %d\n", data);
}
정수형 변수 data를 출력합니다.
→ 포인터 사용 X, 값만 전달됨.


void IncrementData(int* p)
{
	*p = *p + 1;
}
포인터 p가 가리키는 변수의 값을 1 증가시킵니다.


void SetData(int* p, int data)
{
	*p = data;
}
포인터 p가 가리키는 변수에 data 값을 대입합니다.

📌 main() 함수 동작 흐름

int n;
ResetData(&n);
n이라는 정수 선언 (초기값은 쓰레기값일 수 있음).

ResetData(&n) → n을 0으로 초기화.


PrintData(n);     // 출력: data : 0

IncrementData(&n); 
n = n + 1 → n은 이제 1

PrintData(n);     // 출력: data : 1

SetData(&n, 100); 
n = 100


PrintData(n);     // 출력: data : 100

IncrementData(&n);
n = 101


PrintData(n);     // 출력: data : 101
✅ 최종 출력 결과

data : 0
data : 1
data : 100
data : 101
💡 요약
이 코드는 포인터를 통해 변수 값을 함수에서 조작하는 좋은 예제입니다.

포인터로 값을 바꾸는 함수들: ResetData, IncrementData, SetData

단순히 값을 출력만 하는 함수: PrintData
→ 이런 구조는 실제 프로젝트에서도 굉장히 자주 쓰입니다.

이 C 코드를 한 줄씩 분석해드릴게요. 이 코드는 포인터(pointer)를 사용해서 변수의 값을 직접 메모리에서 수정하는 예제입니다.

#include <stdio.h>
표준 입출력 헤더파일을 포함합니다. (printf, scanf 등 쓸 수 있게 해줍니다.)
→ 이 코드에서는 printf는 쓰이지 않았지만, 관습적으로 포함된 것일 수 있어요.


int n = 10;
int* p = &n;
정수형 변수 n에 10을 할당.

정수형 포인터 p는 n의 주소를 저장함.
→ p는 n을 가리키는 포인터예요.


*p = 20;
포인터 p가 가리키는 주소(= n)에 20을 저장.
→ 즉, n의 값이 20으로 바뀝니다.


char c = 10;
char* p2 = &c;
문자형 변수 c에 10을 저장 (여기서 10은 아스키 코드 값이지만 그냥 숫자 10으로 봐도 됨).

문자형 포인터 p2는 c의 주소를 저장함.


*p2 = 5;
포인터 p2가 가리키는 c에 5를 저장.
→ 즉, c의 값이 5로 바뀜.


double d = 9.99;
double* p3 = &d;
*p3 = 3.141592;
실수형 변수 d에 9.99를 저장.

실수형 포인터 p3는 d의 주소를 저장.

p3가 가리키는 d에 3.141592를 저장.
→ d는 이제 3.141592가 됩니다.
변수 초기값 바뀐 값
n 10 20
c 10 5
d 9.99 3.141592
⚠️ **GitHub.com Fallback** ⚠️