2014-10-29 2 views
1

C에서 포인터 조작을 배우려고하는데 코드 일부가 작동하지 않는 것을 이해하지 못합니다.C에서 올바른 포인터 연산

#include <stdio.h> 

int main() { 
    int *alpha[17]; 

    *(alpha+4)= 35; 
    *(alpha+5)= 35; 
    *(alpha+12)= 50; 

    printf("%d", *(alpha+4)); 
    *(alpha+8)=*(alpha+5) + *(alpha+12); 

    return 0; 
} 

printf이 작동하지 않고 이전 라인이 완벽하게 실행되었을 때 충돌이 발생하는 이유는 무엇입니까? 저는 6 번째 값과 13 번째 값의 합과 같게 9 번째 값을 얻으려고합니다.

+0

나를 위해 컴파일되지 않습니다. '오류 : 이진 표현식에 대한 피연산자가 잘못되었습니다 ('int *'및 'int *') ' –

+5

포인터를 추가하고 있습니다. 포인터를 추가 할 수 없어야합니다. – Cornstalks

+0

코드에는 몇 가지 다른 정의되지 않은 동작이 있습니다. 인수 타입이'int *'인 경우 printf 변환 지정자가 인수 유형과 일치하지 않을 때 '% d'을 (를) 사용합니다. int를'int * '에 할당하는 것뿐만 아니라. –

답변

6

int *alpha[17]; 포인터의 배열을 만듭니다.

당신은 INT의 배열을 원하는 경우

int alpha[17];

귀하의 assignations 때문에 포인터 INT에서 암시 적 캐스트의 성공적인 있습니다 사용합니다. (나는 당신이 경고를 받기를 바랍니다)

두 개의 포인터를 추가하는 것은 비관적 일뿐만 아니라 C에도 허용되지 않습니다. This post은 C++에서 두 개의 포인터를 추가하는 것이 금지되어있는 이유를 다루지 만, 인수는 C에도 적용됩니다.

+0

고마워, 나는 "int 타입의 17 개 구성 요소의 포인터 알파를 선언하라"라는 지시를 잘못 해석하여 포인터의 int 배열을 생성하는 것으로 간주했습니다. 나는 지금 어리 석다. 하하. 다시 한 번 감사드립니다! – Kenshin

+1

당신이 그것을 이해하게되어 기쁘게 생각합니다. –

0

포인터의 배열을 만들었지 만 배열이 int이 아닙니다. 당신은 사용해야

int alpha[17]; 
+3

그러나 포인터에 쓰지는 않습니다. 그는 단지 배열에 쓰고있는 중이다. 오해의 소지가있는 첫 번째 문장은 -1입니다. – Cornstalks

+0

'int alpha [17] = {0};'시도해보십시오. –

+0

@Cornstalks 그는 실제로 간접 배열에 쓰기 ... 배열이 할당되지 않은 배열에 대한 포인터. 그는 DEADBEEF에게 편지를 씁니다. –