指针不兼容类型错误

时间:2011-09-09 05:41:32

标签: c

int main()
{
double x = 10.08;
double *p;
p = &x;
printf("value of pointer is %d\n",p);
*p=&x;//error line
printf("value of x, *p = %lf\n",x);
return 0;
}

当我为int类型(即int x,int * p)执行它时,它的工作正常。但不是双倍,为什么?

3 个答案:

答案 0 :(得分:2)

*p的类型为double; &x的类型为double *。它们是不相容的。

顺便说一下,要打印指针值,请使用转换%p

printf("value of pointer is %p\n", p);

答案 1 :(得分:0)

*p的类型为double。 &x是指向double的类型。你为什么期望它们兼容?

我希望您的编译器,如果您打开(并阅读)警告,即使使用int s也要抱怨。

答案 2 :(得分:-1)

替换

 *p = &x                         with     *p = (unsigned int) &x  \\ this works
 *p = &x it means x = &x ; Not a syntax to follow

虽然在c中没有遵循这个因为* p,但是inturns意味着x值,你想将地址存储在x值中,但你没有将它声明为指针而只是一个普通变量。

然而对于int,你没有得到任何错误,但是警告表明

 non portable assigment 

我不知道根深蒂固,但至于我的调查,我猜指针以其他格式保存地址,但向我们显示整数格式

int x;
int *p;
p = &x ;
*p = &x ; warning non portable assignment replace with *p = (unsigned int) &x

using typecasting (unsigned int ) coverts the address format to integer format
I guess So . May be the address format and integer format are different
Thats why you cant assign address to a variable unless it is typecasted
but pointers dont need them because as they are invented to store the address
This is what i think from my investigation

但我强烈建议不要遵循以上语法。

人们总是不使用双指针而是使用无效指针