C语言多重指针问题——自我理解

在STM32嵌入式开发系列中,因为是C语言写代码为主,所以对于指针的使用十分的常用。例如在指导书中经常这么写:

// GPIOH 端口全部输出 高电平
2 *(unsigned int*)(0x4002 1C14) = 0xFFFF;
0x4002 1C14 在我们看来是 GPIOH 端口 ODR 的地址,但是在编译器看来,这只是一
个普通的变量,是一个立即数,要想让编译器也认为是指针,我们得进行强制类型转换,

把它转换成指针,即(unsigned int *)0x4002 1C14,然后再对这个指针进行 * 操作。

经过我查阅资料发现,这样理解指针会非常容易:

自我理解:对于指针而言,类似的,结构体指针也是一样的。所以理解的关键还是在于:每一层指针,都必须有实际指向的地址。所以,将上述的例子改写为:

unsigned int *p,data;

p=(unsigned int *)(0x4002 1C14);

*p=data;

对于指针p而言,定义的类型其实是:unsigned int *,而指针变量里面所存放的是地址,(0x4002 1C14)这个就是地址,但是考虑到指针p的类型,所以才会写成第二行的形式,所以只要记住* 是取data,&是取地址就可以了。最后,我们将这三行组合一下,不就是参考书的东西了吗?这就是个二重指针,不难

参考:http://blog.chinaunix.net/uid-29381996-id-4579359.html

          https://zhidao.baidu.com/question/465849218.html

 

 

野火哥里面有很多类似 如下的

/*使用上面的结构体初始化按键*/
    GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);

GPIO初始化函数,我们看一下这个初始化函数长啥样子:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

为啥能这么写呢?

是因为,形参是指针类型的,首先要干啥?tell me!

首先要指定地址,让他往哪里指,所以GPIO_Init这里面的全都是放的是地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值