2014-09-02 5 views
-4

아래의 배열 선언 유형은 무엇입니까? 누가 나를 위해 명확하게 말할 수 있습니까?다른 배열 선언 유형

int main() { 
    int* arr[3]; 
    int(*arr)[3]; 
    int*(arr[3]); 
} 
+2

http://c-faq.com/decl/spiral.anderson.html – chris

+3

http://cdecl.org/ – P0W

+2

첫 번째와 세 번째는 동일합니다. –

답변

7

당신은 도와 cdecl를 사용할 수 있습니다

  • int *arr[3] "는 포인터의 배열 (3) int로로 ARR 선언"제공합니다.
  • int (*arr)[3]
  • int*(arr[3])
  • "이 포인터의 어레이 (3)이 도착을 int로 선언"사업 "INT의 어레이 (3)에 대한 포인터로 도착 선언"준다.

또한 물론 이것은 "실제"선언이 아닙니다. 종결 세미콜론이없고 동일한 범위에 arr이라는 세 가지 변수를 사용할 수 없습니다.

3

’ 일반적으로 소스 코드를 해독하는 도구 대신에 사용하는 언어를 알고 있으므로 C 선언 분석기를 사용하지 않는 것이 좋습니다.


우선 순위를 기억하는 쉬운 방법은 main의 서명, 즉

auto main(int argc, char* argv[]) 
    -> int 

중 & hellip을 기억하는 것입니다; 여기서 argv은 포인터의 배열 (또는 기술적으로는 그러한 배열의 첫 번째 요소에 대한 포인터 : 선언은 char** argv으로 감쇠 됨)임을 알고 있습니다.

에 해당하는 괄호 선언

char* (argv[]) 

선언이되도록 색인이하는 char을 얻을 수있는 결과를 역 참조 후, 포인터, argv[i]을 얻는다면, 할 수 argv 주어진 것을 의미

char (*b)[3] 

, 즉 즉 b, *b를 역 참조하여 의미 당신은 (*b)[], 그리고 b 배열에 대한 포인터입니다 색인을 생성 할 수있는 배열을 얻을.

’ 이러한 배열의 첫 번째 항목에 대한 포인터가 아닙니다. ’ 포인터는 배열 자체에 대한 포인터입니다. 따라서 1을 b에 추가하면 동일한 크기의 다음 배열에 대한 포인터가 생깁니다. 이러한 [] 및 함수 호출 () 같은

0

후위 연산자는 단항 *보다 높은 우선 순위를 가지므로 *a[N] 같은 선언 *(a[N])로서 해석이나 "포인터 N 소자 어레이"한다. "N 요소 배열에 대한 포인터"를 선언하려면 배열 이름으로 * 또는 (*a)[N]이라는 단항 문자를 명시 적으로 그룹화해야합니다.

다음은 유용한 차트입니다.

T a[N]   -- N-element array of T 
T *a[N]  -- N-element array of pointer to T 
T (*a)[N]  -- pointer to N-element array of T 
T f()   -- function returning T 
T *f()   -- function returning pointer to T 
T (*f)()  -- pointer to function returning T 

당신은 꽤 복잡한 선언에 위를 결합 할 수 있습니다 :

 f   -- f 
     f()   -- is a function returning ("()" has higher precedence than "*") 
    *f()   -- a pointer to 
    (*f())[N]  -- an N-element array of 
    *(*f())[N]  -- pointers to 
    (*(*f())[N])[M] -- M-element arrays of 
T (*(*f())[N])[M] -- T 
: 털이 선언을 읽을 때

T (*a[N])()  -- N-element array of pointers to functions returning T 
T (*f())[N]  -- Function returning pointer to N-element array of T 
T (*(*f())[N])[M] -- Function returning pointer to N-element array of pointer 
         to M-element array of T 

는, 위의 규칙을 기억, 가장 왼쪽 식별자로 시작하고 밖으로 당신의 방법을 작동