结构体指针赋值为什么这样不行?
本帖最后由 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
}
因为引用成员要用 '.',而不是'->' 找到问题了,呵呵,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-9 20:07
因为引用成员要用 '.',而不是'->'
如果实例对象是个指针,那么通过->引用该对象的成员;
如果示例对象不是指针,那么通过.引用该对象的成员。
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