시작하기 전에
같은 변수명을 다른 함수에서 사용했더라도 블록이나 함수가 다르면 별도의 저장 공간을 확보하므로 이는 전혀! 다른 변수로 사용되는 것임
이를 타파하기 위해 사용 범위를 벗어난 경우에도 데이터를 공유할 수 있게 도와주는 녀석이 필요한데, 이게 포인터임
프로그램이 사용하는 메모리의 위치를 주소 값으로 식별이 가능한데 여기에 프로그래머가 임의의 이름을 붙인 것이 변수명이라 할 수 있음
주소: 변수가 할당된 메모리 공간의 시작 주소를 의미
여기에 자료형을 보면 이 변수가 얼마만큼의 메모리를 어느 주소부터 사용하고 있는지 알 수 있음
&
: 주소 연산자 -> 시작 주소를 구해 줌
전용 변환 문자는 %p
이며 주소값의 데이터 크기에 따라 자릿수를 맞춰 16진수 대문자로 출력
포인터: 변수의 메모리 주소를 저장하는 변수로 변수처럼 선언하고 사용
주의! 주소 위치에 있는 변수의 자료형을 적는 것임!
포인터 변수가 선언되면 일반 변수와 마찬가지로 메모리에 저장 공간이 할당되고 그 이후에는 변수명으로 사용할 수 있음
포인터가 가리키는 변수를 사용할 때 간접 참조 연산자 또는 포인터 연산자를 사용
const
를 사용한 포인터가리키는 변수의 값을 간접 참조해서 바꿀 수 없음
(직접 변수에 값을 대입하는 방식으로는 바꿀 수 있음)
아직 어려운데...12장 문자열과 포인터의 관계가 나온다고 한다
포인터에 다른 주소를 대입해 그 값을 바꿀 수 있음
하나의 변수를 동시에 가리키는 일도 가능함
sizeof 연산자로 주소와 포인터의 크기를 구할 수 있음
1) 포인터는 가리키는 변수의 형태가 같을 때만 대입해야 함
2) 형 변환을 사용한 포인터의 대입은 언제나 가능함
도전 실전 예제