layer7 pointer 과제

2020. 7. 3. 15:36카테고리 없음

&-주소 연산자 

:특정한 데이터의 메모리 상 주소값을 알아올 수 있다.

보통 &a와 같이 변수명 앞에 붙여 많이 사용한다. 

 

*-간접 참조 연산자

포인터(주소) 앞에 붙어 포인터가 가리키는 값을 가져오는 연산자

 

 

이중 포인터

포인터 *pa가 int형 변수 a의 주소를 가리키고

이중포인터 **ppa가 &pa의 주소를 가리킵니다.

 

포인터 **ppa의 간접 참조 연산자

ppa=&pa의 주소

*ppa=포인터 pa가 가리키는 값=변수 a의 주소

**ppa=변수 a의 주소를 간접 참조 연산함=변수 a의 값

 

배열: 같은 류의 데이터의 연속적 모임.

메모리 상에 연속된 형태로 주소를 차지하게 된다.

따라서 포인터로도 배열의 원소의 쉽게 접근이 가능하다.


소스 코드
comfile

배열의 이름과 배열의 첫 번째 원소의 주소값은 엄밀히 말해 다른 것이다.

그렇다면 왜 두 값을 출력했을 때 같은 값이 나올까?

 

그 이유는  c언어에서 배열의 이름이 sizeof, & 연산자와 사용될 때를 제외하고,

배열의 이름을 사용시 암묵적으로 첫 번째 원소를 가리키는 포인터로 타입 변환이 되기 때문이다.


생각해보기

 

int arr[3][3]; 과 같은 배열은 내부적으로 어떻게 처리될까?

 

위 int arr[3][3]으로 보면 이는 이차원 배열인데 

컴퓨터 메모리 상에서 이차원(2 dimension)을 표현하는 것은 불가능하다.

따라서 일반 배열과 같이 '같은 자료형이 연속적으로 메모리 상에 존재' 할 것 같다.

그리고 논리적으로 이를 2차원으로 처리할 것 같다.

 

확인

 code
comfile

생각과 같이 메모리 상에 연속적으로 존재한다.


생각해보기2

 

int* arr[3]; 과 같은 배열이 가지는 의미는 무엇일까요? (난이도 : 中)

-포인터형 배열

: 주소를 저장하는 포인터를 한 이름으로 여러 개 선언함.

 

int형 변수 a, b, c를 만들고

포인터형 배열이므로 각각의 주소를 저장함.

그  후 포인터의 값이 변수의 주소와 같은지 확인하는 프로그램.

 


궁금증

 

 

 

*pa=a의 주소를 가리킴