c语言结构体.和->的区别

1.概述:

结构体变量的引用和赋值,有两种形式,一种是用符号”.”,一种是用符号”->”。结构体指针变量一般用”->”,非结构体指针变量,也就是一般结构体变量,一般用”.”。

2.一般结构体变量

struct
{
  uint8_t command[16];
  uint8_t    SerialPortType;
  uint8_t    AliasName[51];
  uint8_t    BaudRate[4];
  uint8_t    DataBits;
  uint8_t    StopBits;
  uint8_t    Parity;
  uint8_t    FlowCtrlMode;
  uint8_t EnableFIFO[4];
} NComSerialInfo;

例如我们定义了这么一个结构体,如果给它的变量赋值,可以这么写:

NComSerialInfo.SerialPortType=1;

这里,我们用的是符号”.”

3.结构体指针变量

typedef struct
{
  uint32_t CR;
  uint32_t GDR;
  uint32_t RESERVED0;
  uint32_t INTEN;
  uint32_t DR[8];
  uint32_t STAT;
} LPC_ADC_TypeDef;
#define LPC_ADC           ((LPC_ADC_TypeDef    *) LPC_ADC_BASE   )
#define LPC_ADC_BASE      (LPC_APB0_BASE + 0x1C000)
#define LPC_APB0_BASE     (0x40000000UL)

这个结构体是cortex m0 lpc1114 ADC模块的寄存器定义结构体,第1~9句,定义了一个LPC_ADC_TypeDef的结构体,第10~12句,把LPC_ADC指向了地址0x40001c000,所以这是一个结构指针。要访问它的成员变量,可以这么用:

LPC_ADC->STAT=1;

或者

*LPC_ADC.STAT=1;

这里用了两种方式访问成员变量,一个用符号“.”,一个用符号”->”。

如果是访问结构指针的变量,用符号”.”的时候,前面要带”*”才可以,如果不想带”*”,就可以直接用符号”->”。