2017-12-05 3 views
-7

저는 C에서 완전히 새롭고 기본적인 스왑 프로그램을 만들려고합니다. 누군가 아래의 코드가 작동하지 않는 이유를 설명해주십시오.이 스왑 프로그램이 C에서 작동하지 않는 이유는 무엇입니까?

#include <stdio.h> 

void swap (int *p1, int *p2); 
    int *temp = *p1; 
    *p1 = *p2; 
    *p2 = temp; 

int main() 
{ 
    int x = 10; 
    int y = 20; 
    int *p1 = &x, *p2 = &y; 
    swap (p1, p2); 

    printf ("x: %d, y: %d\n", x, y); 
} 

미리 감사드립니다.

+7

같은 것 return 0;

이루어집니다 문제. –

+2

'temp'는'int'가 아닌'int'이어야합니다. – Steve

+3

또한 실제 함수를'{} '...로 작성해야합니다. – Lundin

답변

0

void는 하위 프로세스이므로 중괄호로 묶어야하며 세미콜론으로 끝나서는 안됩니다. 반면에 커뮤니티 int * temp = * p1;가 constaint 위반입니다 말한대로, 그것은 int temp = * p1;

아니다 교환 된 값이어야합니다, 그것은 단지 그들이 입력 된 경우로 나타났다.

마지막으로, 메인이 int 반환, 당신이 0을 반환하도록 지정해야하며, 그는 전체 프로그램은 컴파일러 경고를 활성화하고 당신이 볼 것

#include <stdio.h> 

void swap (int *p1, int *p2){ 
    int temp = *p1; 
    *p1 = *p2; 
    *p2 = temp; 
} 

int main() 
{ 
    int x = 10; 
    int y = 20; 
    swap (p1, p2); 

    printf ("x: %d, y: %d\n", x, y); 
    return 0; 
} 
+0

고마워, 정말 도움이 됐어! – Ben

2

int *temp = *p1; (이이 제약 조건 위반하고 진단 컴파일러 발생한다) 컴파일되지 않습니다 : 당신이 포인터 타입 (0 이외)를 int를 할당한다. 그리고 그건 허용되지 않습니다.

int temp = *p1;을 쓰고 swap 함수의 분명한 타이포를 수정하십시오. - 그리고 모든 것이 잘 될 것입니다.

+0

정의되지 않음? 앞뒤로의 변환이 가능합니다. – StoryTeller

+2

@StoryTeller : 확실한가요? 128 비트 'int'와 48 비트 포인터가 있다면 어떻게합니까? – Bathsheba

+0

문제는 명시 적 형변환의 부족입니다 즉, 제약 위반이지만, 포인터와 백 비즈니스에 대한 정수는 완벽하게 다룹니다. 경고 및 모두 – StoryTeller

관련 문제