int t[10];
int * u = t;
cout << t << " " << &t << endl;
cout << u << " " << &u << endl;
출력 :주소
는0045FB88 0045FB88
0045FB88 0045FB7C
u
의 출력을 의미한다.
나는 t
과 &t[0]
이 동일한 값을 가져야한다는 것을 이해하지만, &t
도 같은 방식으로 나타납니다. &는 실제로 무엇을 의미합니까?
int t[10];
int * u = t;
cout << t << " " << &t << endl;
cout << u << " " << &u << endl;
출력 :주소
는0045FB88 0045FB88
0045FB88 0045FB7C
u
의 출력을 의미한다.
나는 t
과 &t[0]
이 동일한 값을 가져야한다는 것을 이해하지만, &t
도 같은 방식으로 나타납니다. &는 실제로 무엇을 의미합니까?
표현식에서 t
을 단독으로 사용하면 배열 대 포인터 변환이 수행되고 배열의 첫 번째 요소에 대한 포인터가 생성됩니다.
t
이 &
연산자의 인수로 사용되면 해당 변환이 수행되지 않습니다. &
은 명시 적으로 주소 t
(배열)을 취합니다. &t
은 배열 전체에 대한 포인터입니다.
배열의 첫 번째 요소는 전체 배열의 시작과 같은 위치에 있으므로이 두 포인터는 같은 값을 갖습니다.
t
은 배열의 주소이고 &t
은 배열에 대한 정적 포인터이므로 표시된 주소는 동일합니다.
나는이 개념을 매우 잘 설명하는 cplusplus forum을 발견했습니다.
가 언급 한 바와 같이 약 &array
:
이 규칙이 적용되지 않는 예외 중 하나입니다. 배열에 대한 포인터로 사용합니다. 다시 배열의 첫 번째 요소를 가리키지 만이 포인터에 포인터를 추가하면 배열을 건너 뛰는 것처럼 배열의 마지막 요소 바로 다음 위치의 주소를 가리 킵니다.
-1 "& t는 배열의 첫 번째 주소에 대한 참조입니다."올바르지 않습니다. –
@ AlfP.Steinbach 어떻게됩니까? & t는 배열에서 사용되는 메모리 블록의 시작 부분에 대한 참조이므로 배열의 첫 번째 주소에 대한 참조입니다. – Serdalis
'& t'은 참조가 아닙니다. 이것은 포인터 값입니다. 배열에 대한 참조를 가질 수 있지만 "& t"는 그렇게 할 수 없습니다. –
t
변수는 변경할 수 없으므로이 변수가 없습니다. t
이라는 이름은 첫 번째 요소의 주소를 참조하기 만합니다 (또한 크기가 연관되어 있음). 따라서 주소의 주소를 가져 오는 것이 실제로 의미가 없으며 C는 단순히 주소가되는 것을 "붕괴"합니다.
것은 같은 종류의 함수의 경우에 발생합니다
int foo(void)
{
return 12;
}
printf("%p and %p\n", (void *) foo, (void *) &foo);
이 같은 일을 인쇄해야합니다, 주소 차례로 취할 수 foo
의 주소를 들고 어떤 변수가 없기 때문에.
C++이고't'라는 변수가 있습니다. 'int (&) [10]'형의 인수를 받아들이는 함수에 건네 줄 수가 있습니다. – Abyx
-1 "t 변수는 변경할 수 없기 때문에 t 변수가 없습니다." 부정확하다. 선언에서 명명 된 객체를 변수라고합니다. 표준을 찾아보십시오. –
t
의 실제 유형은 int[10]
이므로 &t
은 배열의 주소입니다.
또한 int[]
내재적 그래서 t
는
배열 어레이의 첫 번째 요소의 해결 변환 int*
로 변환한다.
아니요, 첫 번째 요소의 주소로 변환됩니다. 절대 메모리 위치는 동일하지만 형식이 상당히 다릅니다. –
@BenVoigt, 예, 감사합니다. – Abyx
¤ 포인터로 변환 된 't'와 '& t'의 유일한 차이점은 포인터 유형입니다. 후자의 지시 대상은 형식적으로 배열 유형이므로, 1을 더하면 메모리에서 다음 배열로 이동합니다.전자의 지시 대상은 요소 유형입니다. 용어 : [comp.lang.C++] 유즈넷 그룹에서, 'u'와 같은 포인터가 배열을 "가리키는"것이라고 말할 수 있는지에 대한 논란이있었습니다. 그 지시 대상은 배열 타입이 아니기 때문입니다. 그것은 표준의 그러한 표현의 사용을 지적함으로써 끔찍하게 해결되었습니다. 건배 & hth., –
@alf는 그 질문으로 주위에 고생하고있는 그 paul 사람을 wasnt한다? –
@ JohannesSchaub-litb : 예 –