c语言的指针有什么用指针中a=*b与*a=b区别

那要看是什么情况了如果是定義的时候赋值就是把a的地址赋给p

如果不是初始化就是把a的地址赋给p里存储的地址,如:

第二项试图将a的地址放在p指向的b里,因为b是(int)而a的地址昰(int*),发生了错误

在java语言中a+=b和a=a+b的主要区别是在运算的精度上。类似的有“-= 、 *= 、/= 、%= ”这里以a+=b 与 a=a+b 举例说明一下。

   附:隐式类型转换:

  自动类型转换也称隐式类型转换,是指不需偠书写代码由系统自动完成的类型转换。
    从存储范围小的类型到存储范围大的类型
    也就是说int类型的变量可以自动转換为long类型,示例代码:

从图中可以看出出现了错误根本无法运行。报错原因我也贴出来了说是“类型不匹配:不能从int转换为byte”,

这里洇为a是byte类型而数字4默认是int 类型。在java中在a+4时,会进行 自动类型转换 所以a+4 会转换成int类型。而变量a还是byte类型将int 类型的a+4赋值给byte类型的a ,无疑會报错。

当然我们也可以进行强类型转换,将已经转换成int类型的a+4强制转换为byte类型这样也是可以的。但是这种转换可能会导致溢出或者精度的下降如果容忍可能出现的误差,可以使用这种转换

(2)下面试一试a+=b的形式

我们发现结果是正确的,程序也没毛病大家需要明確的是“+=”是java中的一个运算符,而不是两个所以在运算时 会进行自动类型转换,也就是低级变量可以直接转换为高级变量所以在编译時没有报错。

(3)总结一下,在两个变量的数据类型一样时:a+=b 和a=a+b 是没有区别的

但是当两个变量的数据类型不同时,就需要考虑一下数據类型自动转换的问题了

我要回帖

更多关于 c语言指针 的文章

 

随机推荐