NULL
다차원배열과 포인터의 관계 본문
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