在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
能啊,知啦时间放屁

在51单片机中,不同类型的数之间能相互赋值吗?它们的指针呢,能相互交换...
不同类型之间是不能直接赋值的,要经过类型的强制转换:int型占4个字节,char型占1个字节,小的给大的类型一般的编译器是可以通过的,但大的给小的你就要指明了 举个例子:int a=2;char b=5;a = b; \/*这种操作一般是允许的*\/ b = (char)a; \/*这需要类型转换*\/ ...

51单片机中C语言int能转换为unsigned char 指针类型吗?怎么转换?
1、可以转换,强制转换就行。例如:int a=100;unsigned char * c = (unsigned char *)a;2、强制类型转换 当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将操作数转化为所需要的类型。强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。显式强制类型转换 显式...

51单片机的数据类型都有那些?
在Keil C51或IAR for C8051编译器下,51单片机的数据类型包括:一、int:占用两个字节,数值范围为-32768到+32767。二、long:占用四个字节,数值范围为-2147483648到+2147483647。三、float:占用四个字节,数值范围为3.40E+38到+3.40E+38。四、double:占用八个字节,数值范围为-1.79E+308到+1...

51单片机C语言 几个数组定义的区别
这种情况是没问题的,这样的使用方法是指在内ram分配一个指针变量("*"号后的data关键字的作用),而且这个指针本身指向 xdata区("*"前xdata关键字的作用)。编译后的汇编代码如下。MOV 0x08,#tmp(0x00) ;0x08和0x09是在内ram区分配的pstr指针变量地址空间 MOV 0x09,#tmp(0x00)这种情况应该是...

51单片机可以通过指针访问寄存器吗
在51单片机的嵌入式C语言编程中,指针是被支持的。因此,在单片机上也可以使用指针进行操作,其使用方法与标准C语言相同。然而,需要注意的是,使用指针进行间接寻址相对于直接访问变量的寻址方式来说,速度会稍慢。

请简述c51新增数据类型bit和sbit之间的区别
相比之下,sbit是C51中另一种位地址类型的数据,它用于在特殊功能寄存器(SFR)中定义可独立寻址的位。与bit不同的是,sbit类型的变量具有明确的位地址,这意味着程序员可以直接通过地址来访问或修改这些变量的状态。sbit类型常用于访问单片机中那些具有特定功能的寄存器位,如I\/O端口的状态、定时器的控制...

51单片机数据类型转换 高分!
void main(void){ float f; int i; double d; RecvData((unsigned char*)&f, sizeof(float)); RecvData((unsigned char*)&i, sizeof(int)); RecvData((unsigned char*)&d, sizeof(double));}宗旨就是,先取其他类型数据的地址,用&符号,然后把地址转换为unsigned char...

51单片机中怎么提取堆栈指针单元的值
读SP的值肯定是MOV A,SP .但是SP只是个指针。他这是指向某个地址的。你要读这个地址的值的话就要用MOV A,@SP。写进去的话同样看你是要换SP指向的位置还是他所指向位置的值。如果是要改变它所指向的位置的话就用MOV SP,A就可以了。改变它指向这个地址的值就用MOV @SP,A。说一下@,@的意思...

51单片机函数参数传指针方式错误的问题
因为地址可能有重叠。可以用两种办法去调试:方法1:在第1、2句只定义变量,不赋值,在第4、5句之间加上这两句话:a='t';p=&t;方法2:在DrawSingleAscii内部这三行之后,加上一句:uchar i, j;uchar str;uint OffSet;pAscii = 't'; \/\/加上这句 看看是什么效果。

51单片机中MOV A,DPTR能这么使用吗?DPTR是属于直接寻址还是间接...
首先51单片机 指令 中 没有 MOV A,DPTR 这条指令,DPTR 是16位的数据指针,读取 数据表 指令为 MOVC A,@A+DPTR 或者 MOVX A,@A+DPTR 只要 指令中有 @ 的指令 都属于间接寻址。 追问 MOV A,DPL可以吗 追答 直接寻址 DPTR 的低字节。 追问 MOV DPTR,#data16 中DPTR属于寄存器寻址? 更多追问 本回答由...

相似回答