OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6198|回复: 12

C语言的一些问题

[复制链接]

29

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
511
金钱
511
注册时间
2015-10-11
在线时间
102 小时
发表于 2016-5-8 12:09:10 | 显示全部楼层 |阅读模式
4金钱
我 的理解是    #define GPIOA     ((GPIO_TypeDef *) GPIOA_BASE)
    这句话的意思就是(其实GPIOA_BASE已经是经过计算好的一个地址值,它和GPIOA的寄存器组结构体的首地址是一个值,再经过(GPIO_TypeDef *) GPIOA_BASE就真正让GPIOA_BASE和那个结构体有了联系,再让GPIOA等于这个地址,就可以访问结构体了;)

各位大神们,这句代码能不能这样理解呢?

最佳答案

查看完整内容[请看2#楼]

正解, GPIOA 就是((GPIO_TypeDef *) GPIOA_BASE),,,((GPIO_TypeDef *) GPIOA_BASE)这是什么,就是一个地址被强制转换成了GPIO_TypeDe类型f的指针,指针就是地址,地址就是指针,但是不同的是指针必须明确其类型
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2016-4-24
在线时间
38 小时
发表于 2016-5-8 12:09:11 | 显示全部楼层
正解, GPIOA 就是((GPIO_TypeDef *) GPIOA_BASE),,,((GPIO_TypeDef *) GPIOA_BASE)这是什么,就是一个地址被强制转换成了GPIO_TypeDe类型f的指针,指针就是地址,地址就是指针,但是不同的是指针必须明确其类型
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-5-8 12:51:10 | 显示全部楼层
good
回复

使用道具 举报

29

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
511
金钱
511
注册时间
2015-10-11
在线时间
102 小时
 楼主| 发表于 2016-5-8 15:55:44 | 显示全部楼层

那我的理解差不多啦,是不是,大神
回复

使用道具 举报

29

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
511
金钱
511
注册时间
2015-10-11
在线时间
102 小时
 楼主| 发表于 2016-5-8 15:56:17 | 显示全部楼层
cyg 发表于 2016-5-8 12:13
正解, GPIOA 就是((GPIO_TypeDef *) GPIOA_BASE),,,((GPIO_TypeDef *) GPIOA_BASE)这是什么,就是一个 ...

那我的理解差不多是准确的,是不是
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-5-8 16:52:11 | 显示全部楼层
未来,我来 发表于 2016-5-8 15:55
那我的理解差不多啦,是不是,大神

现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

6

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2016-4-2
在线时间
66 小时
发表于 2016-5-8 18:57:34 | 显示全部楼层
顶起
享受学习中的乐子,做合格的程序猿
回复

使用道具 举报

5

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2016-4-24
在线时间
38 小时
发表于 2016-5-8 22:39:45 | 显示全部楼层
未来,我来 发表于 2016-5-8 15:56
那我的理解差不多是准确的,是不是

是的
回复

使用道具 举报

7

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-4-27
在线时间
29 小时
发表于 2016-5-8 23:01:52 | 显示全部楼层
那是不是结构体里的其他变量就可以通过指针加1依次进行访问?
回复

使用道具 举报

24

主题

208

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2014-4-8
在线时间
160 小时
发表于 2016-5-9 10:35:38 | 显示全部楼层
庄健宇 发表于 2016-5-8 23:01
那是不是结构体里的其他变量就可以通过指针加1依次进行访问?

是,是指针加一,地址的话,要看看偏移地址,库写的很讲究,真的值得学习
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
发表于 2016-5-10 11:25:11 | 显示全部楼层
同样学习
回复

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2016-5-10 12:45:57 来自手机 | 显示全部楼层
xinxian 发表于 2016-5-9 10:35
是,是指针加一,地址的话,要看看偏移地址,库写的很讲究,真的值得学习

指针加一不是访问里面的变量吧?!!!!
回复

使用道具 举报

5

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2016-4-24
在线时间
38 小时
发表于 2016-5-10 23:18:24 | 显示全部楼层
如果指针加一是能够访问到内部变量的,因为这个指针的类型GPIO_TypeDef ,加1的话会向下偏移一个这个结构体大小的地址,也就是如果定义一个指针数组GPIO_TypeDef *  pp[10],那么这个数组就包含10个GPIO_TypeDef 的指针,pp是一个二级指针,pp的是10个结构体指针数组的首地址,也就是第一个指针的指针,加加的话会便宜一个GPIO_TypeDef 大小,也就是会指向第二个指针的指针  。。。。。。自己都扰晕了,大概就是这个意思。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 05:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表