【结构体学习】

结构体学习


提示:以下是本篇文章正文内容,下面案例可供参考

一、结构体变量定义方式

结构体是一种数据类型不同相关变量or数组的集合,构成结构体这些变量称为结构体的成员
回顾数组定义:数组成员数据类型相同,可以通过下标来区分不同元素。在定义数组时,需要给出数组类型 数组名 数组长度

int a[10];

结构体定义:需要给每个结构体变量名字+数据类型

struct 
{
int a[10];
char a[8]
}st1,st2;       //前面相当于数据类型 st1和st2则为变量

以上的结构体直接定义了结构体变量,若再使用结构体类型时不方便使用,因此我们有了结构体标识符

struct student
{
int age;
float score;
};      //student则是结构体标识符
有了结构体标识符,则可以定义结构体变量,如:
struct student st1,st2;//定义结构体变量

以上也可以在定义标识符的同时定义结构体变量。
下面介绍第三种方式

typedef struct
{
	int a;
	float b;
}TypeDef;
TypeDef a;

二、结构体变量的引用

回顾数组引用:一般不能将数组作为一个整体进行输入、输出或者运算
结构体引用:同样,结构体变量也不能作为整体进行输入、输出、运算,赋值运算除外.只能针对结构体变量的成员进行这些操作
结构体成员属于结构体变量的组成部分,不能脱离结构体变量单独使用

st1.age  //结构体变量的成员

对于结构体变量的操作与同类型变量相同,其本质也是变量或数组

/*eg:构建结构体变量,存入以下数据,并输出
姓名:张三
学号:10086
分数:60
*/
#include<stdio.h>
struct student
{
char name=[10];
char num=[10];
int score;
};
int main()
{
struct student st1;
st1.score=60;
st1.name="张三"
st1.num="10086"
printf("%s","%s","%d/n",st1.name,st1.num,st1.score);
return 0}
/*运行后该程序出现ERR
原因是给数组名直接赋值了
st1.name="张三"
st1.num="10086"
两者均为字符数组,其属于指针常量
*/
//方式1:使用strcpy函数
//修正后需使用strcpy()函数,并且需要添加其头文件#include<string.h>
//将字符串存入字符数组中
strcpy(st1.num,"10086");
strcpy(st1.name,"张三");

printf("姓名\t,学号\t,分数\n");  //\t水平制表符相当于TAB键
printf("%s\t,%s\t,%d\n",st1.name,st1.num,st1.score);
//方式2:直接在初始化赋值

三、结构体指针

回顾指针:指针的基本功能为间接引用。
如:局部变量的跨函数改写,只能通过间接引用才能实现。
结构体指针的功能就是间接引用结构体变量 如在动态链表中只能借助结构体指针才能实现
定义:

typedef struct 
{
char name=[10];
char num=[10];
int score;
}ST;
ST st1,*p;
p=&st1; //定义了结构体指针P,P是指向结构体变量st1的结构体指针 

结构体变量整体赋值;方式1:直接赋值;方式2:结构体指针赋值
方式一:

/*
eg:已知信息:姓名:张三
   			  学号:10086
   			  分数:60
要求:使用初始化方式,将数据存入结构体变量中
再将该结构体变量的内容,复制到另一个相同类型的结构体变量中
注意:结构体变量不能整体输入、输出、运算,只能对成员进行操作,对成员进行复制,是否也需要逐个对成员进行操作呢?	
结构体赋值运算是特例		
*/
#include<stdio.h>
typedef struct
{
char name[10];
char num[10];
int score;
}ST;
void main()
{
ST st1={"张三","10086","60},st2;//两个结构体变量st1 st2
st2=st1;
return 0;
}

方式二:

#include<stdio.h>
typedef struct
{
char name[10];
char num[10];
int score;
}ST;
int main(void)
{
ST st1={"小明","10086","60"},st2,*p,*q;
p=&st1;
q=&st2;
*q=*p;
return 0;
}

结构体指针访问成员:
一般形式为
(*结构体指针).成员名

typedef struct
{
char name[10];
char num[10];
int score;
}ST;
int main()
{
ST st1;*p=&st1;
(*p).score=10;
return 0;
}

以上使用(*p).成员名较为复杂,可使用。结构体指针->成员名

ST st1,*p=&st1;
(*p).score=60;
等价于
p->score=60

四、具体应用案例

4.1 STM32_Hal库函数结构体指针作函数传参

4.2 DSP28335中结构体与联合体、位域

提示:这里对文章进行总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值