c语言stm32问题

u32*pao3=(u32*)(00..略这个是地址)如何理解特别是后一个u32后的*... u32 *pao3=(u32*)(00..略这个是地址)如何理解特别是后一个u32后的* 展开
 我来答
寻路人3
2014-03-12
知道答主
回答量:4
采纳率:0%
帮助的人:7.3万
展开全部

一句话概括,就是告诉编译器pao3这个变量里存的是一个地址值而不是一个整形变量值,虽然他们的表现形式都一致!然后再详细剖析一下上面这句C语言。“u32 *pao3”中
变量类型不是u32,而是u32*。表示变量名pao3所在地址存放的是一个地址值,如果是u32,则表示只是存放的一个32位的整形数据。而地址0x4FFF0001内存放的东西才是32位的整形数据,而这个数有可能是某个整形变量的值或是一个32位寄存器的值。赋值语句后面的(u32*)是一个强制类型转换。所赋的值必须与定义的变量一致。你也可以试试如果把那句话改为u32 *pao3=(u32)(0x4FFF0001)或是u32 *pao3=0x4FFF0001都是会报错的。编译器以为你把一个整形变量赋给了一个指针变量。然后如果你要取该寄存器(0x4FFF0001)的值,则直接取*pao即可,比如printf("%x\n",*pao),如果是在计算机中,你会得到显示13247A1A.


零曲长孙子菡
2019-12-09 · TA获得超过3719个赞
知道大有可为答主
回答量:3068
采纳率:27%
帮助的人:425万
展开全部
#define
Bank1_LCD_C
((uint32_t)0x60000000)
0x60000000地址是一个无符号32位数,
(__IO
uint16_t
*)
(Bank1_LCD_C)将0x60000000地址转换成指向一个类型为__IO
uint16_t的指针。
*(__IO
uint16_t
*)
括号前面的*号是取值。
整句的意思是将0x60000000地址所指向的值赋值成index
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jfluo0101
2014-03-11 · TA获得超过1415个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:272万
展开全部
(u32*)(00.)表示取这个地址所存储的内容,前面的u32表示该内容代表一个无符号的32位数值。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ba4ffee
2014-03-11 · TA获得超过425个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:96.9万
展开全部
u32 是类型,同u16、u8类似,它是32位的。*pao3是个指针,该指针指向“存储着u32类型内容的变量”。=是赋值符,为指针*pao3赋值,赋的值为(00略这是个地址)。总体意思是:定义一个叫pao3的指针,这个指针指向的地址的内容是u32型的,给这个指针赋值为(00略这是个地址)。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
handsome0629
2014-03-11
知道答主
回答量:3
采纳率:0%
帮助的人:4114
展开全部
这个很好解释的:

因为前面你定义了一个32位整形的指针变量,这个变量是用来存放整形数据的地址,这个地址是占4个字节的,假如你后面的地址是8位,16位,32位,它都通过u32* 强制转换成为32位的地址,用来与前面的指针类型去匹配,当然如果你的地址刚好就是32位的,也可以不需要啊,其实就只是一个强制转换的作用,没有其他的意思!
追问
为何不是(u32)呢,为什么要有那个*号。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式