具有数组和指针的typedef类型的嵌套式结构体及结构体成员初始化赋值
前言
本文简单介绍了数组、指针以及typedef类型结构体变量的概念及基本用法,主要介绍typedef类型的结构体变量,以及如何初始化结构体成员。代码部分在keil MDK上写的。
一、数组
int arr[10]={1,2,3,4,5,6,7,8,9,10}
int是数组的类型,即数组成员是整型;arr是数组的名字;10是数组的成员数,即该数组有10个成员。{}中的数字是数组成员的初始值。
arr[0]表示数组第一个成员,值为1;arr[1]表示数组第二个成员,值为2;依次类推,arr[9]表示数组的第10个成员,值为10。
二、指针
int* p;
int a=20;
p为指针变量,用来存放变量的地址。int为指针变量的类型,表示p只能存放整型变量的地址。
p=&a; //&表示取地址
*p=20; //*表示取值
下面这几句代码是对指针最基础的理解
int aaa=10;
printf("%p\r\n",&aaa); //打印aaa的地址,有一种变量来存放地址的-指针变量
int* p=&aaa;
printf("%p\r\n",p);
printf("%d\r\n",*p); //取值
*p=20;
printf("%d\r\n",aaa);
char ch1='a';
char* pp=&ch1;
printf("%p\r\n",pp);
printf("%c\r\n",*pp);
*pp='c';
printf("%c\r\n",ch1);
三、typedef型结构体
1.无嵌套类型成员初始化
typedef struct
{
int age;
float weight;
char name[20];
}STU;
该结构体是利用typedef定义的类型,STU是该结构体的名字;age、weight、name是该结构体的成员。
定义结构体变量
STU stu;stu是结构体变量名,该变量是通过STU来定义的。
对变量stu初始化。
stu={20,65.7,"zhangsan"};
结构体成员取值
printf("%d\r\n",stu.age);
printf("%.1f\r\n",stu.weight);
printf("%c\r\n",stu.name);
2.有嵌套类型成员初始化
typedef struct
{
int age;
float weight;
char name;
SCORE score; //score是具有SCORE结构体类型的结构体变量
}STU;
typedef struct
{
float yuwen;
float shuxue;
float yingyu;
}SCORE;
该结构体是利用typedef定义的类型,STU是该结构体的名字;age、weight、name是该结构体的成员。
定义结构体变量
STU stu;stu是结构体变量名,该变量是通过STU来定义的。
对变量stu初始化。
stu={20,65.7,'zhangsan'};
score={97,99,100};
结构体成员取值
printf("%d\r\n",stu.age);
printf("%.1f\r\n",stu.weight);
printf("%c\r\n",stu.name);
printf("%d\r\n",stu.score.yuwen);
printf("%d\r\n",stu.score.shuxue);
printf("%d\r\n",stu.score.yingyu);
3.指针数组结构体联合使用
int nCh;
typedef struct
{
float wZ;
float wC;
float wF;
float wG;
}PGA;
PGA Pga[3]={{33.56,22.65,35.71,44.29},{22.31,33.32,44.41,33.32},{66.31,22.89,33.74,88.65}}; //每个通道的初始参数不一样
PGA_DESC* pChX =&Pga[nCh];
printf("%.2f\r\n",pChX->wZ);
printf("%.2f\r\n",pChX->wC);
printf("%.2f\r\n",pChX->wF);
printf("%.2f\r\n",pChX->wG);
4.指针、数组、结构体及嵌套联合使用的结构体成员初始化
typedef struct
{
uint16_t wGain;
uint16_t IsDeinit;
}PGA;
typedef struct
{
uint16_t wCFG0;
uint16_t wGDAC;
uint16_t wZDAC;
PGA tStat;
}PGA_REG;
typedef struct
{
float wZeroLow;
float wCoarseTH;
float wFineStep;
float wZeroHgh;
}PGA_DESC;
typedef struct
{
PGA_DESC PgaDesc[3];
PGA_REG REG[3];
float ui;
}PGA_DESC1;
PGA_DESC1 DEV_Default=
{
{{33.56,22.2,33.6,44.7},{22.35,33.2,33.32,22.3},{33.3,56.3,89.6,65.6}},
{{23,24,25,{32,33}},{78,79,80,{33,24}},{97,98,99,{35,36}}},
66.74
};
PGA_DESC* pChX = (PGA_DESC*)&DEV_Default.PgaDesc[nCh];
PGA_REG mReg = DEV_Default.REG[nCh];
printf("%.2f,%.2f,%.2f,%.2f\r\n",pChX->wCoarseTH,pChX->wZeroLow,pChX->wFineStep,pChX->wZeroHgh);
printf("%d,%d,%d,%d\r\n",mReg.wCFG0,mReg.tStat.gain,mReg.wGDAC,mReg.tStat.wGain);
总结
本人是小白,能力有限。只是把自己知道的和理解的表达了出来,不足之处还请大家指教,互相学习。