1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > c语言自定义的类型怎么强制转换 C语言中强制类型转换

c语言自定义的类型怎么强制转换 C语言中强制类型转换

时间:2019-04-05 15:32:01

相关推荐

c语言自定义的类型怎么强制转换 C语言中强制类型转换

指针的实质是地址,通过该地址指向可以找到相应的变量单元。

C语言中的强制类型转换格式为:(类型名)(表达式)

eg:(int)(x+y)表示将x+y的值转化成int型。

而指针类型的强制类型转换格式为:(类型名*)(表达式)

当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。

例:

1。 float f=12.3;

2。 float *fptr=&f;

3。 int *p;

在上面的例子中,假如我们想让指针p指向实数f,应该怎么办呢?是用下面的语句吗?

p=&f;

不对。因为指针p的类型是int*,它指向的类型是int。表达式&f的结果是一个指针,指针的类型是float*,它指向的类型是float。两者不一致,直接赋值的方法是不行的。为了实现我们的目的,需要进行"强制类型转换":

p=(int*)&f; 如果有一个指针p,我们需要把它的类型和所指向的类型改为TYEP*和TYPE,

那么语法格式是:(TYPE*)p;

这样强制类型转换的结果是一个新指针,该新指针的类型是TYPE*,它指向的类型是TYPE,它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都没有被修改。

既然指针实质是地址,那么不管是int,char或是float类型指针,指针本身所占的内存都是一样的32位(以32位机为例),但是指针所指向的内容占有的空间大小是由他的类型决定的,int占2Byte,char占1Byte,float占4Byte。所以int

*p,对p加1,32位的地址p实际上增加了2。同理float *p,对p加1,32位的地址p实际上增加了4。

再看一个例子:#define ADDR (Xuint8*)

0x84430000(注意:Xuint8在xilinx sdk中表示8位无符号整形数据)

这个例子表示把32位地址0x84430000(实际上就是一个指针)强制转换为一个Xuint8型指针,

在这里8表示的是指针指向的内容占8bit,所以ADDR +1,地址实际增加1。如果把Xuint8改为Xuint32,ADDR

+1的结果是地址增加了4。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。