mdk中指针

2019-07-20 09:45发布

已知  STM32F4的  GPIOAIDR  地址是 0x40020010

int n=*( (volatile long *) 0x40020010);

请问下  第一个指针  和 第2个volatile long *指针有什么区别?
(volatile long *) 改成(volatile int *) 效果一样。为什么?



我做了一个实验:
        *(GPIO_TypeDef *)0x40000000 = 57.5d;
结果出错:
RTE qq.c(25):错误:#513:无法将类型“double”的值分配给类型为“GPIO_TypeDef”的实体


猜想:
57.5d是“double”类型
那么应该是先     *0x40000000   指向0x40000000这个地址,  再把57.5d   给(GPIO_TypeDef *)


int n=*( (volatile long *) 0x40020010);
那应该是先    *0x40020010  这个地址,取出   volatile long 类型给左值。不知对不对?


0x40020c14是GPIOA->ODR的地址。
*( (volatile long *) 0x40020c14)=0x0A;
* (char* )0x40020c14 = 0x01<<12;
                GPIOA->ODR =0x01;

* (char* )0x40020c14 = 0xFFFF;//出现一个警告,不能把int类型给char类型,,,,溢出


*(int  *)(0x40000000+0x200fff) = 0xffff;
地址我试了下可以把地址改成表达式。




我想问下二级指针是什么样子的?怎么用, 二级指针就是双指针吗?
有大神普及下吗?万分感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。