주소

2014-07-20 2 views
1

그래서, 나는이 C에있는 경우,주소

int a[50]; 

내가 a를 사용, 실제로 배열의 첫 번째 요소의 주소를 가리 킵니다.

그러나 내가 int b[10][10]인데 b 또는 b[0]을 사용하면 무엇을 가리키게됩니까?

둘째, 내가 할 경우,

`&a[0]` 

이 기본적으로 나에게 첫 번째 요소의 주소를 제공하지만, 내가 할 경우, &a, 이것은 실제로 무엇을 의미 하는가? 또한 &a + 1과 같은 작업도 가능합니다. 기본적으로 배열의 첫 번째 요소의 주소 주소를 계산하고 있습니까?

3d 배열이 있다면 int c[10][10][10], 그 다음은 c을 의미합니까? 어느 요소에 가리 킵니까? 또는, 내가한다면, c[0]+1, 배열의 어떤 부분이 가리킬 것입니까?

감사합니다.

답변

2

당신은 배열이있는 경우 등 그런 다음 첫 번째 배열의 첫 번째 요소에 대한 포인터로 그것을 부패있을 것이다 단지 a를 사용

int a[X][Y]; 

있다.

&a[0]은 첫 번째 배열에 대한 포인터를 반환하고 첫 번째 요소에 대한 포인터로 쇠퇴합니다. 따라서 a&a[0] (일반 a[0]과 물론 &a[0][0])은 모두 같은 것을 가리 킵니다. 차이는 유형이다 :

  • a 정수 포인터로 감쇠 정수 배열 정수
  • a[0]의 어레이에 대한 포인터로 감쇠 정수 배열의 배열이다
  • &a[0]
  • 정수 포인터 정수
  • &a[0][0]의 배열의 배열에 대한 포인터 정수
  • &a의 어레이에 대한 포인터이다

위의 모든 표현식은 매우 동일한 요소를 가리키거나 그 포인터로 부패합니다. 첫 번째 배열의 첫 번째 정수 (예 : a[0][0]). 완전성을 위해서

:

  • a[0][0] 정수, 최초 최초 배열이다. &a 이후

하나 (I을 추가 정수 배열의 배열에 대한 포인터이다.e &a + 1)는 배열 정수 배열의 크기를 더합니다. 즉 표현식은 a 끝의 포인터 인 a + sizeof(a)에 대한 포인터를 반환합니다. 즉, (&a)[1]과 같습니다.


더 호기심 : p[x] 하 일반 포인터 또는 배열 p, 옵션은 p + x 하 동일하다. 그리고 이상한 부분에 대해 : communicative natureaddition이기 때문에, p + xx + p과 같고, 차례로 p[x]x[p]과 같습니다. 간접 참조 용


:

  • *a*a 인덱싱 연산자 보낸 정수 배열 (즉 a[0])
  • *a[0] 그래서, 정수 배열의 배열에 대한 포인터 a를 소멸 역 참조 연산자보다 더 높은 precedence을 가지고 있다면, 먼저 정수 배열 인 a[0]을 가지게되고, 역 참조는 그 배열의 첫 번째 요소에 대한 포인터로 쇠약하게됩니다 그는 역 참조 (즉, 그것은 선언의 배열 형태의 식을 초기화하는 데 이용되는 문자열 리터 인 sizeof 또는 단항 & 연산자의 연산, 또는 인 경우를 제외
+0

그러나 'a [0]'은 무엇을 의미합니까? 또는 '& a'는 무엇을 의미합니까? – bjohn

+0

@bjohn 제 편집을 참조하십시오. –

+0

그리고 '& a + 1'을 수행하면이 점이 실제로 무엇을 가리 킵니까? 'a [0] [0]'의 시작 주소를 125로 가정하면, 어떤 주소가'& a + 1'을 가리킬 것입니까? 즉 X와 Y를 각각 '2'와 '3'으로 취하면된다. – bjohn

0

"N 소자 어레이) a[0][0] 같은있어 T "은"T 포인터 "유형의 표현식으로 변환 ("부패 ")되며 표현식의 값은 첫 번째 M- 요소 배열의 주소가됩니다.

주어진 다음의 선언 :

T a[N][M]; 

a 입력 "TM - 요소 - 요소 배열 N 배열"을 가지고; 위의 규칙에 따라 유형이 "M - 요소 배열 T"또는 T (*)[M] 인 식으로 감쇠되며 값은 해당 배열의 첫 번째 요소의 주소가됩니다.

다음 표 a 관련된 종류와 다양한 표현의 의미를 나타낸다 : 첫 번째 요소의 주소 표현의 모든 어레이 자체의 주소와 동일하기 때문에


Expression Type   Decays to Meaning 
---------- ----   --------- ------- 
     a T [N][M]  T (*)[M]  Points to first M-element array 
     &a T (*)[N][M]    Points to entire NxM array 
     *a T [M]   T *   Points to first element of first array 
     a[i] T [M]   T *   Points to first element of i'th array 
    &a[i] T (*)[M]     Points to i'th M-element array 
    *a[i] T       Value of first element of i'th array 
    a[i][j] T       Value of j'th element of i'th array 
    &a[i][j] T *      Points to j'th element of i'th array 

a, *a&a, a[0], &a[0]&a[0][0]값이이지만, 타입은이 다르다.

이 패턴은 고차원 배열로 확장됩니다. 나는 3-d 배열에 대한 예제를 도출 할 것이지만, 나는 이것을 이미 iPad에 입력하고 있는데, 이것은 이미 상당히 느려졌다.