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;
这里用了两种方式访问成员变量,一个用符号“.”,一个用符号”->”。
如果是访问结构指针的变量,用符号”.”的时候,前面要带”*”才可以,如果不想带”*”,就可以直接用符号”->”。