一.结构体类型的四种定义方式与结构体变量定义:
1.先定义类型结构体类型,再定义结构体变量
struct stu
{
int num;
char *name;
};
void test()
{
struct stu people;
}
2.定义结构体类型的时候定义变量
struct stu
{
int num;
char *name;
}xiao_ming, xiao_hong;
3.一次性结构体类型
struct
{
int num;
char *name;
}xiao_ming, xiao_hong;
4.给一次性结构体起别名,就可以多次定义变量。
typedef struct
{
int num;
char *name;
}STU;
二.结构体变量的初始化:
1.定义变量是初始化
struct stu
{
int num;
char *name;
};
void test()
{
struct stu people = {10, "xiao_ming"};
}
2.定义结构体时定义变量同时初始化
struct stu
{
int num;
char *name;
}xiao_ming = {10, "xiao_ming"}, xiao_hong = {20, "xiao_hong"};
3.使用memset将结构体初始化为0
struct stu
{
int num;
char *name;
};
void test()
{
struct stu people;
memset(&people, 0, sizeof(people));
}
4.逐个成员赋值
struct stu
{
int num;
char *name;
};
void test()
{
struct stu people;
people.num = 10;
people.name = "xiao_ming";
}
三.成员的访问:
- 结构体变量名.成员变量名
- 结构体地址->成员变量名
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
struct stu tom = {10, "tom", 10.0f};
struct stu *p = &tom;
printf("num = %d, name = %s, score = %f\n", p->num, p->name, p->score);
printf("num = %d, name = %s, score = %f\n", (*p).num, (*p).name, (*p).score);
printf("num = %d, name = %s, score = %f\n", tom.num, tom.name, tom.score);
printf("num = %d, name = %s, score = %f\n", (&tom)->num, (&tom)->name, (&tom)->score);
system("pause");
return 0;
}
注意1:
- 结构体(对象)成员选择使用点(左边是变量名)。
- 指针成员选择使用指向运算符(左边是地址)。
注意2:
- 结构体地址和首个成员变量的地址相同。与数组不同的是,结构体变量名不是地址,要对变量名使用取地址符。
- 结构体地址->成员变量名 <==> 成员变量名 <==> *成员变量地址。
- 只需要记住结构体地址可以通过->(指向运算符)寻找到成员变量的地址,直接操作地址所对应的内容。
本文介绍了C语言中结构体的四种定义方式,包括先定义类型再定义变量、直接定义、一次性结构体类型以及结构体类型别名。接着,讨论了结构体变量的初始化方法,如定义时初始化、使用memset和逐个成员赋值。最后,详细阐述了如何通过结构体变量名和指针访问结构体成员,并强调了结构体地址与成员变量地址的关系。
534

被折叠的 条评论
为什么被折叠?



