본문 바로가기

PROGRAMMING LANGUAGE/C

16강 포인터의 사용법

#include <stdio.h>
#include <stdlib.h>

#define 체력 0 
#define 공격력 1
#define 방어력 2

void main()
{
	int Character[3];
	Character[체력] = 20;
	Character[공격력] = 20;
	Character[방어력] = 20;
	for(int i = 0; i < 3; i = i+1)
		printf("%d\n", Character[i]);

	// 외부에서 

	Character; // 주소 
	*(Character + 체력) = 30;
	for (int i = 0; i < 3; i = i + 1)
		printf("%d\n", Character[i]);

}

이 코드에서 #define으로 매크로를 설정하고 Character배열에 각 인덱스에 20 값을 넣어준다. 그리고 Character배열의

첫 번째 인덱스에 접근하여 값을 30으로 바꿔줄 수 있다.

 

#include <stdio.h>
#include <stdlib.h>

#define 체력 0 
#define 공격력 1
#define 방어력 2

void main()
{
	const int Character[3] = { 20, 20, 20 };
	for(int i = 0; i < 3; i = i+1)
		printf("%d\n", Character[i]);

	// 외부에서 

	Character; // 주소 
	*((int*)Character + 체력) = 30;
	for (int i = 0; i < 3; i = i + 1)
		printf("%d\n", Character[i]);

}

강의에서 포인터 변수의 값을 변환하지 못하도록 상수화했는데도 *((int*)Character + 체력) = 30; 이라는 코드로 값을 변환하였다. 이 부분은 이해하지 못했다.

#include <stdio.h>

void ItemBuy(int* gold, char* item)
{
	if (*gold > 500)
	{
		printf("아이템 구매 성공!\n");
		*item = '1';
	}
	else
	{
		printf("아이템 구매 실패!\n");
	}
}

void main()
{
	int gold = 1000;
	char inventory[10] = { 0 };
	ItemBuy(&gold, &inventory[0]);

	printf("gold : %d\n", gold);
	printf("inventory : %c\n", inventory[0]);
}

참조 연산자를 이용하여 전달해도 포인터 변수처럼 호출당하는 함수에서 받아줄 수 있다.

참조 연산자로 gold와 inventory의 주소를 전달한 후에 포인터를 역참조하여 값에 접근한다.

골드가 500이 넘으면 인벤토리 첫 번째 인덱스에 '1'이라는 문자를 넣는다.

골드가 500을 넘지 않으면 " 아이템 구매 실패 "를 출력한다.

이렇게 주소를 함수의 매개변수로 전달하는 것을 CALL BY REFERENCE라고 하고 값을 전달하는

것을 CALL BY VALUE라고 한다. 매개변수로 값을 전달하여 값을 변경한다면 지역변수의 값을

변경하는 것이라서 상황에 맞게 써야한다. 

'PROGRAMMING LANGUAGE > C' 카테고리의 다른 글

17-1 포인터 배열과 배열 포인터  (0) 2021.09.16
17강 다차원 배열  (0) 2021.09.16
15강 포인터와 배열 그리고 상수화  (0) 2021.09.15
14강 포인터  (0) 2021.09.15
13강 배열과 문자열  (0) 2021.09.15