강좌 & 팁
글 수 2,412
2014.03.28 16:07:14 (*.134.169.166)
54308
#include <stdio.h> |
15 23 45 56
34 52 76 23
43 62 91 84
array : BFFFFA04
&array[0][0]+1 : BFFFFA08
array[0]+1 : BFFFFA08
&array[0]+1 : BFFFFA14
array+1 : BFFFFA14
&array+1 : BFFFFA34
*(array[1]) : 34
*(*(array+1)) : 34
실제로는 행렬이 존재하는것이 아니라 표현만 하는것
{15,23,45,56},{34,52,76,23}, {43,62,91,84} 주소는 옆으로 쭉 나열만 된다.
다차원 배열 이므로 array[1] 을 적으면 값을 표현하는것이 아니라 주소를 표현하는것이 된다.
*(array[1])이라고 한다면 값을 뜻함
*(array+1)이 array+1랑 같음 *(*(array+1)) 이라고 써야 값이된다.
array[0]+1은 값이 아니라 주소 , +1을 하면 다음번 주소의 값이지만 &array[0]이라고 하면 행전체의 주소이다. +1을 하면 다음행으로 넘어감
array 와 &array[0]은 같다. 첫번째 원소 의 주소와 같다.
array[0] 도 마찬가지로 첫번째 원소의 주소이다. 값이 아님 다차원배열이므로 값이
아닌 주소이다. array[0][0]이 값이고 &array[0][0]라고 하면 이역시 첫번째 원소의
주소를 가르킨다.
&array[0][0] 과 a[0], *(a+0)+0 은 같은 주소를 가리킨다. 만약에 값을 표현하면
array[0][0], *(a[0]), *(*(a+0)+0) 은 같은 값이 된다.
&array 이라고 하면 배열 전체의 주소를 가르키게 된다. 이경우에 +1을 하게되면
&array+1 에서 마지막 84의 번지의 주소가 아님 .그 다음 번지를 가르킨다.