의미 적으로 의미하는 것은 무엇입니까 sizeof (int) * p
? 그것은이다 :
1. sizeof((int) *p)
또는 2 (sizeof(int)) * p
어떤 규칙이이 방법으로 평가 될 수있는 식을 만든다?sizeof (int) * p는 의미 상으로 무엇을 의미합니까?
2
A
답변
4
sizeof
void main() { int p = 3; printf("%d", sizeof(int) *p); }
이진 *
보다 높은 우선 순위를 갖는 단항 연산자이므로, 식 sizeof (int) * p
는 (sizeof (int)) * p
로서 해석된다. 는 sizeof 연산자로,
하지만 발현를 sizeof ((INT) * P)과 같이 평가 될 수 없습니다
* / \ sizeof p | (int)
편집 onezero의 코멘트에서
다음은 파스 트리입니다 , 형변환 연산자 및 * (참조 해제) 연산자의 우선 순위가 같고 오른쪽에서 왼쪽으로 연결됩니까? 당신이 볼 수 있듯이
(6.5.3) unary-expression: postfix-expression ++ unary-expression -- unary-expression unary-operator cast-expression sizeof unary-expression sizeof (type-name) alignof (type-name)의
(int)
이sizeof
식, 전체 정류장의 일환으로 해석됩니다
여기합니다 (C2011 표준의 ballot draft에서) 관련 구문입니다. 캐스트 표현의 일부로 해석되지 않습니다. 이 구문에서는 sizeof
에 캐스트 식이 직접 따라 올 수 없습니다. 그들 사이 단항 연산자 (&
중 하나 *
, +
, -
, ~
, !
)이 있어야한다.
-1
p는 무엇입니까? 가 출력 12
void main() { char *p = "a"; printf("%d", sizeof((int) *p)); }
가 출력 4.
+2
아니요 p는 무엇입니까? 두 번째 예제에서 괄호를 명시 적으로 도입했기 때문에 컴파일러가 컨텍스트에서 표현식을 평가하도록 강제로 (p는 포인터 임) 방식으로 결과를 4로 가져옵니다. – onezero
어쩌면 당신은 당신이 방금 한 좋은 테이블에서 말한 것을 정확하게 설명하는 위키 백과 문서에 링크 할 수도 있습니다 : [C/C++ Operator precedence] (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence) – Alex
@JohnBode 그러나 sizeof 연산자, 타입 캐스트 연산자 및 * (역 참조) 연산자의 우선 순위가 같고 오른쪽에서 왼쪽으로 연결되는 것처럼 표현식을 sizeof (int) * p와 같이 평가할 수 없습니까? – onezero
@Alex : 우. 나는 두 테이블을 C와 C++ 두 개의 분리 된 테이블로 분리 해주기를 바랐다. –