你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

结构体指针赋值为什么这样不行?

[复制链接]
mylovedream 提问时间:2017-7-9 18:49 /
本帖最后由 mylovedream 于 2017-7-9 18:52 编辑

各位好,为什么结构体初始化的时候,用指针赋值不行?用  .  却可以?具体表现是编译两种方法都可以通过,但是用指针赋值下载到板子没反应。

原代码:
  1. void LED_GPIO_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);

  5.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;       
  6.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
  7.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  8.   GPIO_Init(GPIOC, &GPIO_InitStructure);

  9.         GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);         // turn off all led
  10. }
复制代码


有问题的代码:
  1. void LED_GPIO_Config(void)
  2. {
  3.         GPIO_InitTypeDef *GPIO_InitStructure;
  4.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
  5.           GPIO_InitStructure->GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;       
  6.           GPIO_InitStructure->GPIO_Mode = GPIO_Mode_Out_PP;      
  7.           GPIO_InitStructure->GPIO_Speed = GPIO_Speed_50MHz;
  8.           GPIO_Init(GPIOC, GPIO_InitStructure);
  9.         GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);         // turn off all led
  10. }
复制代码






收藏 评论12 发布时间:2017-7-9 18:49

举报

12个回答
斜阳 回答时间:2017-7-9 20:07:40
因为引用成员要用 '.',而不是'->'
mylovedream 回答时间:2017-7-9 21:17:04
找到问题了,呵呵,C 语言不过关
这样就可以了。

  1. void LED_GPIO_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure_val,*GPIO_InitStructure;
  4.         GPIO_InitStructure = &GPIO_InitStructure_val;
  5.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
  6.           GPIO_InitStructure->GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;       
  7.           GPIO_InitStructure->GPIO_Mode = GPIO_Mode_Out_PP;      
  8.           GPIO_InitStructure->GPIO_Speed = GPIO_Speed_50MHz;
  9.           GPIO_Init(GPIOC, GPIO_InitStructure);
  10.         GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);         // turn off all led
  11. }
复制代码

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

黑皮男 回答时间:2017-7-10 08:53:44
光定义指针,指针是一个地址,都没有分配对应的内存空间,肯定不行

评分

参与人数 1ST金币 +6 收起 理由
MrJiu + 6 很给力!

查看全部评分

没事逛荡 回答时间:2017-7-10 09:30:02
定义指针不赋值,就是野指针啊!
anobodykey 回答时间:2017-7-10 09:33:30
没有分配空间
七哥 回答时间:2017-7-10 14:33:52
楼上说的都对,
地板的解释,跟我要说的一样
zhao.zhao 回答时间:2017-7-10 14:40:35
指针要有指向对象的
moyanming2013 回答时间:2017-7-10 17:20:59
斜阳__ 发表于 2017-7-9 20:07
因为引用成员要用 '.',而不是'->'

如果实例对象是个指针,那么通过->引用该对象的成员;
如果示例对象不是指针,那么通过.引用该对象的成员。
moyanming2013 回答时间:2017-7-10 17:27:24
mylovedream 发表于 2017-7-9 21:17
找到问题了,呵呵,C 语言不过关
这样就可以了。


你的代码会在栈上多一个没必要的指针。
用如下的代码即可:
  1. void LED_GPIO_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure_val;
  4.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
  5. <span style="font-size: 14px; line-height: 21px;">GPIO_InitStructure_val.</span>GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;        
  6. <span style="font-size: 14px; line-height: 21px;">GPIO_InitStructure_val.</span>GPIO_Mode = GPIO_Mode_Out_PP;      
  7. <span style="font-size: 14px; line-height: 21px;">GPIO_InitStructure_val.</span>GPIO_Speed = GPIO_Speed_50MHz;
  8.           GPIO_Init(GPIOC, &<span style="font-size: 14px; line-height: 21px;">GPIO_InitStructure_val</span><span style="font-size: 14px; line-height: 1.5;">);</span>
复制代码


arenas 回答时间:2017-7-11 08:55:13
斜阳__ 发表于 2017-7-9 20:07
因为引用成员要用 '.',而不是'->'

引用声明为指针的结构体,用->才能获取成员
斜阳 回答时间:2017-7-11 12:38:37
SInzo 发表于 2017-7-11 08:55
引用声明为指针的结构体,用->才能获取成员

如果是指针,就要用‘->’。9喽已经有说明了
ychlucky 回答时间:2017-7-12 08:50:14
学习了 学习了

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版