完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
[C] 纯文本查看 复制代码
#include int i=256;[C] 纯文本查看 复制代码 char c=255;[C] 纯文本查看 复制代码 pc=&c;[C] 纯文本查看 复制代码 pi=&i; pc=(char *)pi; //疑问处}既然所有指针类型都是占四个字节,那么将int类型指针赋给char类型指针是不会导致数据丢失的吧。既然这样按我的理解, 将右值指针赋给左值指针(两种指针类型不同)只是程序员希望将右值指针所指向的数据类型通过指针按照左值指针指向的数据类型来访问。 既然要通过左值指针来访问右值指针所指向的数据类型,那么,问题来了,指针在定义的时候,就已经知道自己在加加或者减减操作时应该访问多少字节的内存, 或者加减n时应该跳过多少字节的内存。既然要用左值指针来进行后续的数据访问,那么为什么不直接把右值指针的地址给左值指针,(正如我第一句所说的,都是四字节不会丢失数据) 而要进行强制类型转换呢? 而且疑问处的代码去掉(char *),在VC++6.0 还有多版的c在线编译器上均不会报错…是因为像我理解的一样所以才不会报错,还是其他。还是必须要进行强制类型转换?希望大家指点一下迷津! |
|
相关推荐
8个回答
|
|
pc=(char *)pi;左右都是指针,对于某些编译器,确实只是复制了一个地址,无需关心这个地址的类型,反正在后面使用pc的之后,会按照pc的类型来访问。因为这里没有涉及到指针的运算,编译器在这里能比较了解程序员的意图,所以不加强制类型转换编译的时候也不会导致歧义,只是不太严谨而已。这个应该和编译器设置有关,我用的iar环境要求必须强制转换,否认编译报错。
对有的场景强制转换则对于表达程序员意图就是必须的。 unsigned char j = 0; j = *((char *)(pi)+1); 这里加和不加(char *)都是合法,但是不同的两种编译结果 个人理解 |
|
|
|
自己顶一下~
|
|
|
|
在线等答案,要不会睡不着的…
|
|
|
|
我问的问题太弱智了吗?怎么没人理我?
|
|
|
|
多谢大神指点
|
|
|
|
單純不讓編譯器報錯而已...
----------------------------------------------------------------------------------------------------- 既然所有指针类型都是占四个字节,那么将int类型指针赋给char类型指针是不会导致数据丢失的吧。 這句話怪怪的...指針是4個字節只是因為它取址空間能到32bit 跟你數據丟不丟一點關係都沒有.... |
|
|
|
首先指针就是一块被分配的内存,指针的宽度就是你MCU的机器宽度,比如8位宽度,地址0~255,指针也是8位,它指向的范围就是0~255,以此类推,16位字宽的,指针占2个字节,它指向的范围是0~65535,你定义一个指针*p,比如MCU是16位字宽的,假设指针被分配地址100和101两个字节,它占2个字节,所以能指向0~65535的地址范围,无论什么类型的指针占内存大小都是一样的。
指针有了,指向什么类型的数据是另外一回事,指针操作数据,比如指针操作char类型数据,说明它指向的内存地址是以1个字节操作的,假如字符指针*p,占地址100和101,指向字符数组a[2],a的起始地址是65530,占地址100和101的指针指向数组a,说明p指向65530地址了,如果指向a[1],因为p是字符指针,字符占一个字节,p指向地址就进一个字节,指向63331了,如果p和数组a是整型,p指向a[1]就进2个字节了,指向65532了。 所以,指针类型决定了指针步进地址的大小,所以你可以把指针强制转换成任何类型,指针本身大小永远不变。 |
|
|
|
楼上正解。“指针类型决定了指针步进地址的大小,所以你可以把指针强制转换成任何类型,指针本身大小永远不变。”
数据类型是char,就访问一个字节,是int类型的,就访问4个字节大小。指针本身就是4个字节。 |
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4440 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
311浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
296浏览 2评论
311浏览 2评论
310浏览 2评论
352浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 12:12 , Processed in 0.983265 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号