에 대한 포인터 결과에 주소를 전달 하는가하는 &a[0]
의 유형 pointer to int
이거나 int
인지?
내가이 글을 읽고 후이 혼란에 온 :유형 승격
은 배열의 첫 번째 요소에 대한 포인터로
a
를 사용하여, 우리는 수정할 수 [0] :*a = 7;
.
참고 : &a[0]
유형을 알고 싶습니다.
에 대한 포인터 결과에 주소를 전달 하는가하는 &a[0]
의 유형 pointer to int
이거나 int
인지?
내가이 글을 읽고 후이 혼란에 온 :유형 승격
은 배열의 첫 번째 요소에 대한 포인터로
a
를 사용하여, 우리는 수정할 수 [0] :*a = 7;
.
참고 : &a[0]
유형을 알고 싶습니다.
&a[0]
은 int
에 대한 포인터입니다. 첨자 연산자 []
는 주소 연산자 &
보다 더 긴밀하게 결합하기 때문에
&a[0]
가 &(a[0])
로 구문 분석 : 여기에 대한 해석의 단계는 다음과 같습니다.a
은 배열이지만이 경우 첫 번째 요소에 대한 포인터로 자동 변환됩니다. (이것은 sizeof
, _Alignof
또는 &
의 피연산자 있었다 또는 어레이를 초기화하는 데 사용되는 문자 스트링 인 경우는 전환되지 않을 것이다.)a[0]
포인터를 취하고 상기 제 원소 (원소 0)에 대한 좌변된다.&(a[0])
은 a[0]
에 대한 포인터입니다.a[0]
은 int
이며 a[0]
에 대한 포인터는 int
에 대한 포인터입니다.p
에는 &a[0]
의 값이 할당됩니다. 따라서 p
은 a
의 첫 번째 요소에 대한 포인터입니다.
p
은 a
의 첫 번째 요소에 대한 포인터이기 때문에 *p
은 해당 요소의 왼쪽 값입니다. lvalue는 과제의 왼쪽에서 참조하는 객체에 할당 할 수 있습니다.
a[0]
의 주소는 정수에 대한 포인터 유형입니다. *a
은 *(a + 0)
과 같으므로 a[0]
일 뿐이므로 배열의 첫 번째 요소를 수정할 수 있습니다.
&
은 주소 연산자이므로 &a[0]
은 배열 a
의 첫 번째 요소 주소를 취하므로 int *
입니다. []
이 *
보다 higher precedence을 가지고 있기 때문에 다음과 같이 당신은 그것을 읽을 수 있습니다 :
&(a[0])
더 명확 할 수있다. 이 사건 당신은 여기서
p = a ;
작품 배열 decaying to a pointer에 않습니다. 역사적인 이유로
p = a;
및
p = &a[0]
에 대한
은 동일합니다. 참고
auto q = &a;
도 유효하지만 q 유형은 int *가 아니라 int [10] *가됩니다. 이것은 아마도 당신이 원하는 것이 아닙니다.
'auto q = & a'는 C가 아닙니다.이 질문에는 C가 붙지 않고 C++. –
'a [0]'은 int이므로'& a [0]'은 int를 가리키는 포인터입니다. '& (something)'은 그 것에 대한 포인터입니다. '*'접두사를 붙일 때 할당이 다르게 작동하기 때문에 포인터에 대한 할당이 혼란 스럽습니다. –
아래로 유권자가 의견을 남깁니다 .. – haccks