在51单片机中,不同类型的数之间能相互赋值吗?它们的指针呢,能相互交换吗?

比如说一个是:int 一个是char或者是doule,本人是新手,自学的,很多细节不懂~~~

不同类型之间是不能直接赋值的,要经过类型的强制转换:
int型占4个字节,char型占1个字节,小的给大的类型一般的编译器是可以通过的,但大的给小的你就要指明了

举个例子:
int a=2;
char b=5;

a = b; /*这种操作一般是允许的*/
b = (char)a; /*这需要类型转换*/追问

那指针呢?可以直接交换吗? 因为之前书上看,感觉指针好像也分类型的~~~

追答

一般指针都是4个字节的,它里面存的是某种类型数据的地址,在相互赋值时,也要类型转换,比如:
int a;
char b;
int* pA=&a;
char* pB=&b;

pA = (int *)pB; /*需要转换类型*/

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-27
可以,但是注意数据类型转换时类型的提升带来的麻烦,大体规则如下
如果有一边的类型是long double,则把另一边也转成long double。
否则,如果有一边的类型是double,则把另一边也转成double。
否则,如果有一边的类型是float,则把另一边也转成float。
否则,两边应该都是整型,首先按上一小节讲过的规则对a和b做Integer Promotion,然后如果类型仍不相同,则需要继续转换。首先我们规定char、short、int、long、long long的转换级别(Integer Conversion Rank)一个比一个高,同一类型的有符号和无符号数具有相同的Rank。
第2个回答  2013-09-27
可以,但要数据转换。如:
uchar a;
uint b;
a=(uchar)(b);
第3个回答  2013-09-27
能啊,知啦时间放屁
相似回答