mylovedream 发表于 2017-7-9 18:49:48

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

本帖最后由 mylovedream 于 2017-7-9 18:52 编辑

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

原代码:void LED_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);

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

        GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);       // turn off all led
}

有问题的代码:
void LED_GPIO_Config(void)
{
        GPIO_InitTypeDef *GPIO_InitStructure;
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
        GPIO_InitStructure->GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;       
        GPIO_InitStructure->GPIO_Mode = GPIO_Mode_Out_PP;      
        GPIO_InitStructure->GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, GPIO_InitStructure);
        GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);       // turn off all led
}





斜阳__ 发表于 2017-7-9 20:07:40

因为引用成员要用 '.',而不是'->'

mylovedream 发表于 2017-7-9 21:17:04

找到问题了,呵呵,C 语言不过关:P
这样就可以了。

void LED_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure_val,*GPIO_InitStructure;
        GPIO_InitStructure = &GPIO_InitStructure_val;
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
        GPIO_InitStructure->GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;       
        GPIO_InitStructure->GPIO_Mode = GPIO_Mode_Out_PP;      
        GPIO_InitStructure->GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, GPIO_InitStructure);
        GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);       // turn off all led
}

黑皮男 发表于 2017-7-10 08:53:44

光定义指针,指针是一个地址,都没有分配对应的内存空间,肯定不行

没事逛荡 发表于 2017-7-10 09:30:02

定义指针不赋值,就是野指针啊!

anobodykey 发表于 2017-7-10 09:33:30

没有分配空间

toofree 发表于 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 语言不过关
这样就可以了。


你的代码会在栈上多一个没必要的指针。
用如下的代码即可:
void LED_GPIO_Config(void)
{
      GPIO_InitTypeDef GPIO_InitStructure_val;
      RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
<span style="font-size: 14px; line-height: 21px;">GPIO_InitStructure_val.</span>GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;      
<span style="font-size: 14px; line-height: 21px;">GPIO_InitStructure_val.</span>GPIO_Mode = GPIO_Mode_Out_PP;      
<span style="font-size: 14px; line-height: 21px;">GPIO_InitStructure_val.</span>GPIO_Speed = GPIO_Speed_50MHz;
          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>

页: [1] 2
查看完整版本: 结构体指针赋值为什么这样不行?