2020. 7. 3. 15:36ㆍ카테고리 없음
&-주소 연산자
:특정한 데이터의 메모리 상 주소값을 알아올 수 있다.
보통 &a와 같이 변수명 앞에 붙여 많이 사용한다.
*-간접 참조 연산자
포인터(주소) 앞에 붙어 포인터가 가리키는 값을 가져오는 연산자
이중 포인터
포인터 *pa가 int형 변수 a의 주소를 가리키고
이중포인터 **ppa가 &pa의 주소를 가리킵니다.
포인터 **ppa의 간접 참조 연산자
ppa=&pa의 주소
*ppa=포인터 pa가 가리키는 값=변수 a의 주소
**ppa=변수 a의 주소를 간접 참조 연산함=변수 a의 값
배열: 같은 류의 데이터의 연속적 모임.
메모리 상에 연속된 형태로 주소를 차지하게 된다.
따라서 포인터로도 배열의 원소의 쉽게 접근이 가능하다.
배열의 이름과 배열의 첫 번째 원소의 주소값은 엄밀히 말해 다른 것이다.
그렇다면 왜 두 값을 출력했을 때 같은 값이 나올까?
그 이유는 c언어에서 배열의 이름이 sizeof, & 연산자와 사용될 때를 제외하고,
배열의 이름을 사용시 암묵적으로 첫 번째 원소를 가리키는 포인터로 타입 변환이 되기 때문이다.
생각해보기
int arr[3][3]; 과 같은 배열은 내부적으로 어떻게 처리될까?
위 int arr[3][3]으로 보면 이는 이차원 배열인데
컴퓨터 메모리 상에서 이차원(2 dimension)을 표현하는 것은 불가능하다.
따라서 일반 배열과 같이 '같은 자료형이 연속적으로 메모리 상에 존재' 할 것 같다.
그리고 논리적으로 이를 2차원으로 처리할 것 같다.
확인
생각과 같이 메모리 상에 연속적으로 존재한다.
생각해보기2
int* arr[3]; 과 같은 배열이 가지는 의미는 무엇일까요? (난이도 : 中)
-포인터형 배열
: 주소를 저장하는 포인터를 한 이름으로 여러 개 선언함.
int형 변수 a, b, c를 만들고
포인터형 배열이므로 각각의 주소를 저장함.
그 후 포인터의 값이 변수의 주소와 같은지 확인하는 프로그램.
궁금증
*pa=a의 주소를 가리킴