C modf函数intpart为零?

C modf函数intpart为零?,c,C,当我输入任何数字时,我总是得到intpart等于0,我做错了什么 #include <stdio.h> #include <math.h> int main(int argc, char* argv[]) { double x=0.,fraction=0.; int intpart=0; printf("read value of x :"); scanf("%lf",&x); fraction=modf(x,&intpart); printf("x=%

当我输入任何数字时,我总是得到
intpart
等于
0
,我做错了什么

#include <stdio.h>
#include <math.h>

int main(int argc, char* argv[])
{
double x=0.,fraction=0.;
int intpart=0;
printf("read value of x :");
scanf("%lf",&x);
fraction=modf(x,&intpart);
printf("x=%f    intpart=%d   fraction=%f \n",x,intpart,fraction);
return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
双x=0,分数=0。;
int部分=0;
printf(“x的读取值:”);
扫描频率(“%lf”、&x);
分数=modf(x,&intpart);
printf(“x=%f intpart=%d分数=%f\n”,x,intpart,分数);
返回0;
}
double*
作为第二个参数。但是您正在传递一个
int*
。所以,它是。解决方法是使用
双精度*

改变

int intpart=0;

编译时启用所有警告。叮当声产生警告:

警告:向的参数传递“int*”的指针类型不兼容 键入“double*”[-Wincompatible指针类型]

gcc生产:

警告:从不兼容的指针类型传递'modf'的参数2 [-Wincompatible指针类型]


参见C11草案,7.12.6.12,。

您能否在标准中给出该部分,请说明?如何将double转换为int为什么不起作用?@rondino告诉我们您认为在哪里可以将任何
double
转换为
int
。如果你的意思是“为什么编译器不能推断出我真正想要的并为我转换”,那么谢天谢地,因为这并不是那么专横。如果你的意思是将
int*
转换为
double*
,那么不会,它会产生别名问题。为什么不简单地使用正确的类型并将
intptr
声明为
double
double iptr
?@rondino指针不是隐式转换的,除了to
char*
不能显式转换和取消引用之外,这一事实从以下事实中得出:(A)不同的指针可能有不同的表示,以及(B)试图通过另一种类型的指针访问一种类型的对象违反了严格的别名规则;更直接地看:
double*
int*
是不同的、不兼容的类型。编译器不会自动意识到您真正想要的内容,并修复代码和/或在指针类型之间转换,从而导致别名。@rondino不客气!你想检查一下标准,这太好了!顺便说一句,这里有一个链接到各种C(和C++)版本的PDF格式的最终草稿的线程。在查找信息时,我喜欢保存这些信息并通过它们进行文本搜索,考虑到它们有多大,有时效果会出人意料地好
double iptr = 0;