// Pointer.cpp
// 포인터 문법 소개
#include "pch.h"
#include <stdio.h> // printf 함수를 사용하기 위해
// main 함수에 들어 있는 값 1 증가 시키기
char IncData(char* p_num, char* p_num1)
{
(*p_num)++;
(*p_num1)++;
}
int main()
{
// 컴퓨터의 메모리를 사용하려면 메모리의 크기, 주소가 필요함
// 변수의 주소 -> a라고 선언한 곳의 위치, 자료형 -> 메모리의 할당 크기가 1byte
char a = 5;
// 주소를 얻을 때에는 &(번지 계산)연산자 사용(단항 연산자)
// 주소를 사용할 때는 *(번지 지정)연산자 사용(단항 연산자)
*& a = 5;
// 고 <--- ---> 저(stack 메모리에 쌓이는 구조) -> 1Mbyte
// 6이 정상적으로 출력되지만, 에러 창(경고 메시지)로 메모리 침범했다는 문구 발생(디버그 모드)
// 컴파일러가 변수를 메모리에 배치할 때 12의 배수에 해당하는 주소에 배치
*(&a - 1) = 6;
printf("a = %d\n", *(&a - 1));
// -52라고 적으면 메모리 침범했다는 문구를 발생시키지 않음
*(&a - 1) = -52;
// 하나의 값을 증가시킬 경우에는 이렇게 변수 하나를 선언하고 함수를 호출하여 변화시키는 것이 가능
// 그런데 만약에 값이 2개 이상 선언되고 한 번에 변화시키고 하는 경우에는?
// 함수에 선언되어 있는 리턴문도 변수 하나만 변화시키는 것이 가능하다.
// 이 때 사용하는 것이 주소를 사용해서 바꿔주면 된다.
// 주소는 자기 자신을 가리킬 때에는 4byte를 차지한다.
// 매번 형변환하면서 주소를 참조하면서 값을 바꾸는 것이 여간 번거롭기에
// 함수의 반환형을 제거하고 매개변수를 포인터 변수로 사용
char b = 4, c = 5;
IncData(&a, &b);
printf("num1: %hhd\nnum2: %hhd", a, b);
// 프로그램 종료
return 0;
}
// 둘은 서로 같은 표현
&*data = 5;
data = 5;
본 작성글은 금배씨 영상 강의 중 "포인터 문법 소개" 를 바탕으로 작성되었습니다