-
-
[分享]C语言基础七-结构体
-
发表于: 2021-5-24 17:55 3858
-
short、int、long、char、float、double这六个关键字代表C语言里的六种基本数据类型。C语言中,还提供了struct结构体数据类型,结构体是一种构造类型,由若干成员组成,每个成员可以是一个基本数据类型也可以又是一个构造类型,因此结构体可以用来存放一组不同类型的数据。例如:
我们定义了一种Student结构体数据类型和一种pStudent结构体指针数据类型,可以使用Student、pStudent定义变量。
我们知道,一个结构体可以有多个成员,当我们定义结构体的时候,底层会根据我们的结构体成员算出对齐值,然后根据对齐值大小申请内存。
当传入tagStu给函数的时候,函数中的tagStu相当于重新申请的变量,拷贝外部的实际参数tagStu,我们在函数内部修改tagStu不会改变实际参数的值,这就是传值。如果我们想修改实际参数的值,需要把地址传过去,函数拷贝的是地址,根据地址修改里面的值,就可以改变实参的值,这就是传地址。传值会消耗内存,传地址效率更高。
typedef struct _Student
{
int
nId;
char szName[
16
];
double dbHeight;
}Student,
*
pStudent;
typedef struct _Student
{
int
nId;
char szName[
16
];
double dbHeight;
}Student,
*
pStudent;
typedef struct _Student
{
int
nId;
char szName[
16
];
double dbHeight;
}Student,
*
pStudent;
/
*
变量的定义
*
/
/
/
1.
结构体
Student tagStuA;
/
/
2.
指针
pStudent pTagStuB;
Student
*
pTagStuC;
/
*
变量的初始化
*
/
/
/
1.
大括号初始化
Student tagStuC
=
{
202101
,
"xiaoxin"
,
100.0
};
/
/
1.
单个成员赋值
tagStuC.dbHeight
=
101.0
;
/
/
3.
同结构体变量可以给同结构体变量赋值
Student tagStuD
=
tagStuC;
pStudent pTagStuE
=
&tagStuC;
/
/
变量的访问, . 和
-
> 运算符的优先级比
*
运算符高
printf(
"%s\n"
,tagStuC.szName);
printf(
"%s\n"
,pTagStuE
-
>szName);
typedef struct _Student
{
int
nId;
char szName[
16
];
double dbHeight;
}Student,
*
pStudent;
/
*
变量的定义
*
/
/
/
1.
结构体
Student tagStuA;
/
/
2.
指针
pStudent pTagStuB;
Student
*
pTagStuC;
/
*
变量的初始化
*
/
/
/
1.
大括号初始化
Student tagStuC
=
{
202101
,
"xiaoxin"
,
100.0
};
/
/
1.
单个成员赋值
tagStuC.dbHeight
=
101.0
;
/
/
3.
同结构体变量可以给同结构体变量赋值
Student tagStuD
=
tagStuC;
pStudent pTagStuE
=
&tagStuC;
/
/
变量的访问, . 和
-
> 运算符的优先级比
*
运算符高
printf(
"%s\n"
,tagStuC.szName);
printf(
"%s\n"
,pTagStuE
-
>szName);
typedef struct _Student
{
int
nId;
char szName[
16
];
double dbHeight;
}Student,
*
pStudent;
void ChangeValueA(Student tagStu)
{
tagStu.szName
=
xiaoxin;
}
void ChangeValueB(pStudent pTagStu)
{
pTagStu
-
>szName
=
xiaoxin;
}
int
main()
{
Student tagStu;
/
/
传值
ChangeValueA(tagStu);
/
/
传地址
ChangeValueB(&tagStu);
}
typedef struct _Student
{
int
nId;
赞赏
他的文章
- [分享]C++基础十七-异常机制 8580
- [分享]C++基础十六-模板 8941
- [分享]C++基础十五-运算符重载 8964
- [分享]C++基础十四-抽象类 8677
- [分享]C++基础十三-多态 8477
看原图
赞赏
雪币:
留言: