打印

在看STM32库时碰到的C语言的指针问题

[复制链接]
2785|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ringsearch|  楼主 | 2011-10-23 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在看STM32的库函数时,有一C语言指针的问题:
typedef struct
{
  __IO uint32_t CCR;
  __IO uint32_t CNDTR;
  __IO uint32_t CPAR;
  __IO uint32_t CMAR;
} DMA_Channel_TypeDef;

首先先用typedef声明了DMA_Channel_TypeDef;

在一个函数的定义中void DMA_Init(DMA_Channel_TypeDef*  DMAy_Channelx, DMA_InitTypeDef*  DMA_InitStruct)

其中的形参DMA_Channel_TypeDef*  DMAy_Channelx, DMA_InitTypeDef*  DMA_InitStruct中定义指针变量时那个*号是紧挨着DMA_Channel_TypeDef的,而不是像平时普通的定义中那个*号是紧挨着变量名如:int  *a;这个*号紧挨着DMA_Channel_TypeDef有什么特殊的含义吗?如果*号是紧挨着后面的变量名呢?我发现似乎只有用typedef声明过的才这样用,这是为什么呢?
还有就是普通的int *a;这类的*号可以紧挨着前面那个而不是紧挨着变量名吗?

有点印象似乎C语言中这是和运算符的结合顺序有关,但是不太确定。希望哪位高人能解答下,呵呵。
沙发
acgean| | 2011-10-23 17:53 | 只看该作者
这里再定义指针呢.
推荐楼主再翻翻 c 的教材吧.

使用特权

评论回复
板凳
香水城| | 2011-10-23 18:05 | 只看该作者
星号“*”既可以挨着变量名,也可以挨着类型名,两头都不靠也可以,没有区别。

以下几种写法都可以:
DMA_Channel_TypeDef*  DMAy_Channelx;
DMA_Channel_TypeDef  *DMAy_Channelx;
DMA_Channel_TypeDef * DMAy_Channelx;
int *a;
int* a;
int * a;

使用特权

评论回复
地板
无冕之王| | 2011-10-23 21:26 | 只看该作者
楼主C语言指针没过关

使用特权

评论回复
5
ringsearch|  楼主 | 2011-10-24 11:37 | 只看该作者
呵呵,是要回去看看C语言的书了,谢谢香主的回答。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

36

帖子

1

粉丝