>백엔드 개발 >C++ >배열에서 포인터로의 변환과 연산자 주소(&)가 C의 배열 주소에 어떤 영향을 미칩니까?

배열에서 포인터로의 변환과 연산자 주소(&)가 C의 배열 주소에 어떤 영향을 미칩니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-07 15:08:13823검색

How Do Array-to-Pointer Conversion and the Address-of Operator (&) Affect Array Addresses in C  ?

배열 주소 및 포인터 변환 이해

C에서 배열과 포인터는 밀접하게 관련되어 있지만 그 관계를 이해하는 것은 까다로울 수 있습니다. 주제를 자세히 살펴보기 위해 다음 코드 조각을 살펴보겠습니다.

int t[10];

int * u = t;

cout << t << " " << &t << endl;
cout << u << " " << &u << endl;

관찰한 출력은 다음과 같습니다.

0045FB88 0045FB88
0045FB88 0045FB7C

출력 해독

u(0045FB88)의 주소는 해당 주소의 첫 번째 요소를 가리키므로 이해할 수 있습니다. 배열 t. 그런데 t가 포함된 표현식을 분석할 때 혼란스러운 부분이 발생합니다.

  • t: 이는 배열의 첫 번째 요소의 주소를 나타내며 &t[0과 동일합니다. ].
  • &t: 놀랍게도 동일한 값도 산출됩니다. (0045FB88) t. 그런데 왜 그럴까요?

배열-포인터 변환과 배열 주소 비교

이 동작을 이해하는 열쇠는 t가 표현식에서 사용되는 방식에 있습니다. .

  • t를 단독으로 사용하면 배열에서 포인터로의 변환이 자동으로 발생합니다. 이 변환은 암시적으로 배열의 첫 번째 요소에 대한 포인터를 생성합니다.
  • 반대로 t가 & 연산자에 대한 인수로 사용되면 배열에서 포인터로의 변환이 발생하지 않습니다. 대신 &는 명시적으로 배열 자체의 주소를 사용합니다.

따라서 &t는 배열의 첫 번째 요소에 대한 포인터가 아니라 전체 배열에 대한 포인터입니다.

메모리 위치

메모리에서는 배열의 첫 번째 요소와 배열의 시작 부분이 동일한 위치를 차지합니다. 이것이 t, &t[0], &t가 모두 동일한 값을 갖는 이유입니다.

결론적으로 t와 관련된 표현식은 배열에서 포인터로 변환하는 것과 다음을 사용하여 명시적으로 배열 주소를 가져오는 것의 차이를 보여줍니다. & 연산자. C에서 배열과 포인터를 효과적으로 사용하려면 이러한 차이점을 이해하는 것이 중요합니다.

위 내용은 배열에서 포인터로의 변환과 연산자 주소(&)가 C의 배열 주소에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.