[혼공C] chapter 09. 포인터

회색몽구스·2024년 2월 6일
0

09-1 포인터의 기본 개념

시작하기 전에
같은 변수명을 다른 함수에서 사용했더라도 블록이나 함수가 다르면 별도의 저장 공간을 확보하므로 이는 전혀! 다른 변수로 사용되는 것임
이를 타파하기 위해 사용 범위를 벗어난 경우에도 데이터를 공유할 수 있게 도와주는 녀석이 필요한데, 이게 포인터임

메모리의 주소

프로그램이 사용하는 메모리의 위치를 주소 값으로 식별이 가능한데 여기에 프로그래머가 임의의 이름을 붙인 것이 변수명이라 할 수 있음

주소 연산자

주소: 변수가 할당된 메모리 공간의 시작 주소를 의미
여기에 자료형을 보면 이 변수가 얼마만큼의 메모리를 어느 주소부터 사용하고 있는지 알 수 있음
&: 주소 연산자 -> 시작 주소를 구해 줌
전용 변환 문자는 %p이며 주소값의 데이터 크기에 따라 자릿수를 맞춰 16진수 대문자로 출력

포인터와 간접 참조 연산자

포인터: 변수의 메모리 주소를 저장하는 변수로 변수처럼 선언하고 사용
주의! 주소 위치에 있는 변수의 자료형을 적는 것임!

포인터 변수가 선언되면 일반 변수와 마찬가지로 메모리에 저장 공간이 할당되고 그 이후에는 변수명으로 사용할 수 있음

포인터가 가리키는 변수를 사용할 때 간접 참조 연산자 또는 포인터 연산자를 사용

const를 사용한 포인터

가리키는 변수의 값을 간접 참조해서 바꿀 수 없음
(직접 변수에 값을 대입하는 방식으로는 바꿀 수 있음)
아직 어려운데...12장 문자열과 포인터의 관계가 나온다고 한다

09-2 포인터 완전 정복을 위한 포인터 이해하기

주소와 포인터의 차이

포인터에 다른 주소를 대입해 그 값을 바꿀 수 있음
하나의 변수를 동시에 가리키는 일도 가능함

주소와 포인터의 크기

sizeof 연산자로 주소와 포인터의 크기를 구할 수 있음

포인터의 대입 규칙

1) 포인터는 가리키는 변수의 형태가 같을 때만 대입해야 함
2) 형 변환을 사용한 포인터의 대입은 언제나 가능함

  • 포인터에 내가 생각하는 번지를 직접 대입할 수 있을까요?
    원하는 정수 값을 포인터에 대입하는 것이 가능하지만 그 주소에 있는 데이터가 무슨 의미이고 어떤 영역인지 어떻게 알고?
    여기서 생각해보면 포인터를 선언하고 초기화하지 않는 것도 매우 위험한 일인 것을 알 수 있음

도전 실전 예제

profile
끄아아아아 할 수 있다

0개의 댓글