2016-10-06 5 views
-2

다른 함수 내부의 값을 변경하고 싶습니다.함수 내부의 변수 값을 변경하십시오.

int Function(int *var){ 
    int i=125; 
    var = i; 
} 
int Function2(){ 
    int apple; 
    Function(&apple); 
    printf("%d", apple); 
} 

이이 라인 var = 125;error: assignment makes pointer from integer without a cast 보여줍니다.

apple = 125을 얻으려면 i의 값을 var에 복사하고 싶습니다. (그러나 Function을 남기면 스택 내에있는 i은 해제됩니다.)

어디에서 실수했는지는 알 수 없습니다.

+1

(nit)이지만''* ''는 * 유형 *이 아닌 * 변수 *와 함께 사용됩니다. '(int * var)'. 'int * a, b, c;'('b'와'c'는 포인터가 아닙니다 ...) –

+0

^위의 코멘트는 개인 스타일이며, 언어. 또한'int *'는 실제로 타입이 –

+0

'* var = i'이다. 그게 문제 야. –

답변

1

코드에서 int *var = &apple 발생합니다.

그래서 var에 사과의 주소를 보유하고

주소 0x1000000에 저장된 사과 변수를 상상해보십시오. 그래서 0x1000000을 가리키는 var.

var = i 일 경우 var 변수는 0x1000000의 주소를 남겨두고 새 주소를 i의 값으로 125로 유지합니다. 이는 더 낮은 메모리 주소에 액세스 할 수 없으므로 유효하지 않습니다.

따라서 * var = i는 사용자 요구 사항을 충족시켜야합니다.

3

포인터를 역 참조해야합니다.

*var = 125; 

작성한대로 포인터에 저장된 주소 (포인터가 가리키는 포인터)를 변경하려고합니다.

+0

해결책으로'var' 값 = 125 그리고'apple' 메모리 주소에서 값을 확인하면'125'을 볼 수 있습니다. –

+0

@Alexis_FR_JP 예. 당신은 정확합니다 (나는 당신의 코멘트를 잘못 읽었으므로 나의 오래된 코멘트를 삭제했습니다). –

+0

작성된대로 코드는 명백하게 무효합니다. C 언어는 암시 적 정수 - 포인터 변환을 지원하지 않습니다. 코드에는 정의 된 동작이 없습니다. 따라서 "포인터에 저장된 주소를 변경하려고 시도 중"이라고 결론을 짓는 방법은 없습니다. – AnT

관련 문제