2010-06-07 3 views

답변

10

글쎄, a는 배열의 첫 번째 요소의 주소이고 &a는 배열의 주소이지만 분명히 둘 다 같은 주소를 가지고 있습니다.

그러나 포인터에서 숫자를 더할 때 (또는 빼기) 컴파일러는 데이터의 크기를 고려하므로 (int의 크기가 4 바이트라고 가정 할 때) a + 1은 a보다 큽니다. 4 포인터를 한 정수 앞에 놓기 때문에 & a + 1은 40만큼 커질 것입니다. 왜냐하면 포인터가 앞으로 10 개의 INTEGERS 배열을 더 많이 차지하기 때문입니다.

21

두 진술 모두 주소를 출력하며 포인터 계산을 설명하기위한 것입니다.

a&a은 동일하지 않으며 유형이 다르지만 동일한 메모리 주소를 보유합니다.

&a

당신이 추가 할 때

그래서 1에서 그 유형을 유지 (배열에 대한 포인터와 같은 역할) 유형 int (*)[10]
a는 (하나의 요소에 대한 포인터와 같은 역할) 타입 int [10]입니다입니다 마음. 포인터는 주소에 포함 된 유형의 크기만큼 오프셋됩니다. a+1은 int 크기, 즉 배열의 두 번째 요소만큼 오프셋합니다. &a+1은 전체 배열을 완전히 지나치게 오프셋합니다.

+1

거의 모든 것이 C에서 어떤 유형인지 : 산술 및 크기입니다. – mathk

+0

완벽을 기하기 위해,'& a [0]'은'int *'타입이고'a'와 매우 비슷하게 동작 할 것이라고 덧붙이면 좋을 것입니다. – Hugues

+0

@Brian R.Bondy 그래서 'sizeof'를 사용하여 유형의 차이점을 보여줄 수 있습니까? – sikisis

관련 문제