포인터는 변수의 주소
포인터도 선언해서 쓰는면에서는 변수랑 똑같음
- 간접 참조 연산자임 (*) 주소를 가지고 변수를 접근한다라는뜻
포인터는 연산이가능( 더하기 빼기만)
포인터(변수의 주소, 주소를 가지고 있는 변수)와 배열(배열의 이름은 상수 주소)은 같이 주소를 나타냄
함수에서 파라미터값으로 포인터를 넘겨줄수도있음
변수는 메모리에 저장됨 메모리의 단위는 바이트
첫번째 바이트 주소는0, 두번째 바이트는 1,...
변수의 크기에 따라 메모리 공간 달라짐
char = 1바이트
int = 4
이런식으로..
메모리에 저장될때 이렇게 순차적으로 차곡차곡 저장되어지는게아니라 이런식으로 저장됌.
주소는 4바이트 단위로 저장이됨. 그래서 저런식으로 저장되는거임. 변수의 시작은 4의 배수의 단위로써 시작함.
9 10 11은 사용하지않음.
사용하지 않는 바이트임
변수의 주소를 계산하는 연산자: &
변수 i의 주소: &i
같은 형끼리 연산을 해야됌 아니면 오류가 날수도있음.
포인터는의 선언
포인터는 변수의 주소를 가지고 있는 변수
int * p; (포인터의 선언)
주소 연산자: &
간접 참조 연산자: * (포인터가 가리키는 값을 가져오는 연산자)
pi에는 i의 주소값이 들어가게됨 근데 이제 *pi를 출력하게되면 i의 값인 10이 나오게됨.
위에있는 그림은 pi를 출력했기에 i의 주소가 출력됨.
형이 다른것에 저장해버리면 warning뜸
메모리는 바이트 단위를 기준으로 주소가 매겨짐
char: 4 short: 2 int: 4 long: 4 float: 4 double: 8
포인터도 메모리에 할당되는 변수임변수의 주소를 추출하는데 사용되는 연산자는 &이며, 변수 x의 주소를 추출하여 변수 p에 대입하는 논리는p = &x라고 할수있고,정수형 포인터 p가 가리키는 위치에 25를 저장하는 논리는int *p = NULL;*p = 25;라고 할수있음.
포인터 연산에서는 증가, 감소, 덧셈, 뺄셈 연산이 가능하며,증가 연산의 경우 증가되는 값은 포인터가 가리키는 객체의 크기만큼 증가됨.
증가 연산을 진행하게되면 이렇게 포인터 변수에 주소값을 각각 정해주고 ++연산을 진행해주면 형의 크기 단위로 증가 감소가 일어나게됨.
*p++와 (*p)++의 차이점은 전자는 p만 증가시키는 것이고 후자는 p가 가르키는 것을 증가시키는 것이다
p가 포인터라고 하면 *(p+3)의 의미는 p로부터 객체 단위의 3을 더한 후에 그 값을 가져오는것
'C' 카테고리의 다른 글
c programing (0) | 2023.10.17 |
---|