C语言指向不同数据类型的指针可以直接赋值吗

int a=2,*q=&a;
float b=2.1,*p=&b;
*q=*p;
为什么会出错?

这种是不会出错的

比如这个代码

#include <stdio.h>
int main()
{
    int a=2,*q=&a;
    float b=2.1,*p=&b;
    *q=*p;
    printf("%d %f\n", *q, *p);
    return 0;
}

会输出2  2.100000

这个等效于 a=b, float赋值给int,会自动做强制转换,也就是向下取整。

当如果是 q=p 那就不行了。 不同类型指针不可以直接赋值。

如果一定要赋值 可以q=(int *)p;做显式的强制转换。 但是由于int和float的存储结果不同,得到的值也是错的。

追问

如果是在函数里呢…我是写在函数里

追答

只要是这么写的,是不是在函数里面没影响

追问

可是虽然编译通过了,但运行后就是输入a的值之后会弹出警告程序终止

追答

传完整代码看看

传完整代码看看

追问

现在电脑不在身边……所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改改吧

现在电脑不在身边……所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改改吧

现在电脑不在身边……所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改改吧

现在电脑不在身边……所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改改吧

现在电脑不在身边…所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改改吧

现在电脑不在身边…所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改改吧

现在电脑不在身边…所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改吧

现在电脑不在身边…所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改吧

现在电脑不在身边…所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改吧

现在电脑不在身边…所以就是像这种情况是可以赋值的是吗,如果是的话应该是我代码有别的问题我回去再改吧

追答

确定是可以的,如果出错了那就是其它问题,比如空指针或者越界一类的

温馨提示:答案为网友推荐,仅供参考
相似回答