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)执行它时,它的工作正常。但不是双倍,为什么?
答案 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
但我强烈建议不要遵循以上语法。
人们总是不使用双指针而是使用无效指针