NULL

다차원배열과 포인터의 관계 본문

C

다차원배열과 포인터의 관계

1924 2016. 12. 19. 02:25



int * parr[20;는 

[ ] 역시 가리키는것이기때문에

포인터와 같아서 *을 하나 더 붙여서

이중포인터가 된다.


int arr2d[3][4];

2차원 배열은 쉽게 포인터형으로

결정짓을수없다.


(*ptr)[4]; 이런식으로 선언해야된다.

뒤에 [4]는 안써줘도 자동으로 할당된다.


ptr=arr2d; 이렇게 해주면

arr2d에 주소값을 저장한다.



배열의 1열의 인덱스마다 

첫번째 행의 주소값을 가리킨다.



2차원배열에서는 배열이름과

배열의 이름[0]의 값은 틀리다.


이유는 ?

배열이름은 배열전체의 크기이고

배열이름[0]은 1행의 크기이다.

그래서 다르다.




배열의이름에 +1 

이런식으로 연산을 하게되면

1열씩 증가하게 되는 결과를 볼수있다.

크기또한 1열의 길이만큼 크기만큼 증가한다.



가로의 길이가 다르기때매

증감하는 크기에 차이가 있다.


포인터형도 가로길이에

따라 나뉘기때문에

2차원배열의 포인터형 결정이 쉽지않다.



int (*ptr)[4] 가 4칸씩 건너뛴다는 말은

길이가 1행에 4칸씩 있으면

ptr+1같이 연산을 하게되면

그 행의 칸을 건너뛴다는 말이다.




포인터 배열과 배열 포인터의 개념을

정확히 구분해야된다.





매개변수에서는 둘다 동일한 선언이다.




2차원배열을 함수의 인자로 전달하려면

sizeof(배열이름)/sizeof(배열이름[0])

이런식으로 하면 된다.

배열이름[0]을 하는 이유는

배열의 행의 길이는 하나하나가

타입형크기이기때문이다.



2차원배열에서도 arr[i]==*(arr+i)



모두다 동일한 연산이다.

'C' 카테고리의 다른 글

함수의 선언  (0) 2016.12.20
함수포인터 선언과 이해  (0) 2016.12.20
이중포인터 이해하기  (0) 2016.12.19
2차원배열 개념정리  (0) 2016.12.19
포인터 const선언  (0) 2016.12.19
Comments