打印

一个C语言问题

[复制链接]
2382|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
福州观沧海|  楼主 | 2012-8-2 22:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
char *Flash_ptr;                          // Flash pointer
Flash_ptr = (char *) 0x1040;              // Initialize Flash pointer
我对二条语句的理解不知是否正确:定义了字符型指针char *Flash_ptr;那么Flash_ptr本身也被默认为字符型变量。而0x1040却超出了字符型的范围,所以需要用(char *)来进行强制类型转换?其中()表示强制类型转换,(char*)则表示将0x1040强制类型转换为字符型指针。
不甚理解,请高手们指点,谢谢!

相关帖子

沙发
MCU52| | 2012-8-2 23:11 | 只看该作者
本帖最后由 MCU52 于 2012-8-2 23:12 编辑

1,”Flash_ptr本身也被默认为字符型变量“。是字符型指针变量。
第二句就是对这个指针赋值,
2,0x1040是个绝对地址,可以存放任何类型,而Flash_ptr指针指向的是字符型,
“(char*)则表示将0x1040强制类型转换为字符型指针”。对

使用特权

评论回复
板凳
福州观沧海|  楼主 | 2012-8-3 09:41 | 只看该作者
请问LS,"Flash_ptr”一个指向字符型的指针,他本身的变量类型是不确定的?既可以存放字符型大小的数据,又可以存放整型大小的数据?

使用特权

评论回复
地板
xyz769| | 2012-8-3 10:43 | 只看该作者
Flash_ptr = (char *) 0x1040;

这句,表示将指针指向 0x1040这个地址。类型还是指针。

使用特权

评论回复
5
sedatefire| | 2012-8-3 10:50 | 只看该作者
“而0x1040却超出了字符型的范围,所以需要用(char *)来进行强制类型转换?”
你对指针的理解恐怕有些问题
地址的范围  
由mcu的总线宽度和编译器决定,和数据类型没有任何关系。
在51中,和存储类型有些关系,data,xdata等等。

使用特权

评论回复
6
福州观沧海|  楼主 | 2012-8-3 11:53 | 只看该作者
就是说不管指向字符型的指针还是指向整型的指针亦或者是指向浮点型的指针,他们都是指针型变量,没有普通变量那样具有的数据类型的约束。

使用特权

评论回复
7
zhaofy521| | 2012-8-3 12:46 | 只看该作者
6# 福州观沧海

指针变量的长度在变,像32位机的话4个字节。。。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
tuzihog + 1 说的好~~
8
菜鸟同学| | 2012-8-3 16:29 | 只看该作者
指针就是一个类型,这个类型装的是一个数据的地址,而这个数字有多个类型,char int float double ......
。所以char* 只是表示你这个指针变量Flash_ptr 存储的地址指向的数据类型是char ,而实际的寻址看你的CPU或者系统是多少位的决定了。你这个应该是某个单片机 FLASH擦写操作中的代码吧。:lol
NOTE:Flash_ptr是一个存地址。不是char  

使用特权

评论回复
9
吹起的水滴| | 2012-8-3 17:04 | 只看该作者
针变量的长度在变,像32位机的话4个字节。。。

使用特权

评论回复
10
hawksabre| | 2012-8-3 18:28 | 只看该作者
指针变量本身也在变  建议少用指针

使用特权

评论回复
11
杜专| | 2012-8-3 21:03 | 只看该作者
表示是一个地址呢

使用特权

评论回复
12
nudf0009| | 2012-8-3 21:24 | 只看该作者
一个字符指针的用法。

使用特权

评论回复
13
hpxlove| | 2012-8-6 11:08 | 只看该作者
2条语句的意思就是 0x1040是地址 而且地址里面的值为char 型

使用特权

评论回复
14
tuzihog| | 2012-8-8 21:17 | 只看该作者
7# zhaofy521
说的很好:楼主应该好好看看这个回答
自己测试的结果:
16位机的指针变量长度是2个字节
编译环境IAR for 430
32位机的指针变量长度是4个字节
编译环境C-Free 5.0
测试代码:
unsigned int a;
char *Flash_ptr;
Flash_ptr = (char *) 0x1040;      
a = sizeof(Flash_ptr);
printf("%d\n",a);

使用特权

评论回复
15
nqyijian| | 2012-8-10 11:45 | 只看该作者
定义了字符型指针char *Flash_ptr;那么Flash_ptr本身也被默认为字符型变量

这个不对,Flash_ptr是指针变量,不是字符型变量。只是它装着的地址中存储的是个字符型变量。
或者说,它存着一个字符型变量的地址。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

311

帖子

1

粉丝