2014-10-09 3 views
0

을 예상 사용 포인터 값이 숙제가 아니라 내 마지막 임무는 C.오류 : 부동 소수점 값이

따라서

을 코딩 할 때 내가 분명히 포인터를 이해하지 못했다 분명히 있다고했다, 나는를 입력 시도 함수에서 정수를 반전시키기위한 포인터를 사용하는 간단한 프로그램입니다. 그래서 이해의 차이가 어디에 있는지 알 수있었습니다.

명백하게 나는 그것에 도착했다. 그러나 나는 아직도 내가 잘못하고있는 것을 알아낼 수 없다.

내 소스 코드는 다음과 같습니다.

#include <stdio.h> 

float invert(int *num); 

void main (void) 
{ 
int num; 
float a; 

printf("enter an integer \n"); 

scanf("%i", &num); 

printf("Number entered %i \n", num); 

a=invert(&num); 

printf("This is the invse from main %f \n", a); 

} 


float invert(int *num) /* function inverts integer */ 

{  
float invse; 

printf("num is %i \n\n", *num); 

invse = 1/(float)num; 

printf("invse is %f \n\n", invse); 

return(invse); 

} 

나의 생각은 내가 함수 반전에 납입의 주소에 저장된 값()를 사용하는 컴퓨터를 지시하는 포인터를 사용하는 것이 었습니다. 포인터가 변수 선언에 나타납니다. 그 포인터에 저장된 값을 float으로 캐스팅 했으므로 이것을 반전하고 로컬 변수에 저장합니다.

문제는 로컬 변수 할당에있는 것 같습니다. 제 컴파일러 반환 "invert.c : 29 : 2 : 오류 : 부동 소수점 값이 invse = 1/(플로트) NUM 예상 사용 포인터 값, 분명히 내 코드 역에 대한 포인터 값을 나타냅니다 ^

, 하지만 난 혼란 찾을 부동,로 선언했다. 어떤 도움에 감사드립니다

합니다. 이것은 내가 여기에 게시되지 않은 내 할당에 대한 코드의 내 큰 세트를 완료 한 날을 절약 할 수 있습니다.

감사합니다.

+2

'num'은 포인터입니다. '* num'은 int입니다.보십시오'invse = 1/(float) * num' –

+0

좀더 명확하게 말하면 :'int v = * num; invse = 1/(float) v;' –

답변

1

printf로 전화로 전화하십시오. 10

printf("num is %i \n\n", *num); 

당신은 이미 위해 역 참조 num 포인터 당신이 반전을 위해 invert에 전달 된 값에 액세스하는 것을 알고 : *num.

그렇다면 반전 자체를 수행 할 때 num을 역 참조하지 않는 이유는 무엇입니까?

invse = 1/(float)num; 

난 당신이 printf 쓴 사람이 있다면, 당신은 또한 실제 반전

invse = 1.f/*num; 
으로 대안

invse = 1/(float) *num; 

또는으로 수행되어야한다는 것을 깨달아야한다, 의미

오리지널 변형이 ​​올바르지 않습니다. C에서 포인터를 부동 소수점 유형으로 변환 할 수 없으므로 오류 메시지의 원인이됩니다.

P. 더 큰 그림의 관점에서 숫자를 포인터로 invert에 전달할 실제 이유가 없습니다. 즉각적인 가치를 전달하는 경우 당신에 더 의미를

float invert(int num) 
{ 
    ... 

을 만들 것, 물론, invert 제품 내부 역 참조 할 필요가 없습니다.

+0

감사합니다 오드리! 어쩌면 지난 며칠 동안 코드를 너무 오랫동안보고 있었을 것입니다. 예, 저는 printf를 작성했습니다. 그러므로, 나는 invsen = 1/(float) * num에 대해 역변환이 필요하다는 것을 깨달았 어야만합니다. 이제 작동합니다. 감사합니다. – Eric