2015-01-11 8 views
0
#include <stdio.h> 

void readMatrix(int*a,int*b){ 
    int r,c; 
    scanf("%d%d",&r,&c); 
    a = &r; 
    b = &c; 


} 

main(){ 

    int a,b; 
    readMatrix(&a,&b); 
    printf("%d\n%d",a,b); 
} 

실행할 때 값 1과 2를 삽입하고 기본 1697527160 및 1700556911에 a, b 변수를 인쇄합니다. 간단히 a, b 값을 스캔 할 수 있음을 알고 있습니다. main하지만 내 코드의 결함은 무엇입니까?포인터가 올바른 값을 반환하지 않습니다.

+0

이 문제가 아니었다. 올바른 답변을 확인하십시오. 그러나 어쨌든 도움을 주신 데 대해 감사드립니다. – SokCEID

답변

0

로컬 변수 ab을 수정하려면 두 개의 로컬 변수 rc의 주소를 가져야합니다. 이들은 함수의 범위에만 존재합니다. 호출자는 이로부터 영향을받지 않습니다. a 및/또는 b을 함수에서 제외해도 포인터가 가리키는 객체가 함수 외부에 존재하지 않으므로 포인터가 매달려있을 수 있습니다.

는 사용자가 직접 함수에 전달 된 포인터를 사용하여 이러한 문제를 해결할 수 있습니다. 이 위치에 scanf 기능을 쓰기 그 포인터에 의해 바깥을 지적 할 수 있습니다 :

void readMatrix(int*a, int*b) { 
    scanf("%d%d", a, b); 
} 
+0

나는 "가치에 의한"원리를 부분적으로 잊었다. 당신은 대단히 감사합니다. – SokCEID