结构体的意义 问题:学籍管理需要每个学生的下列数据:学号、姓名、性别、年龄、分数,请用 C 语言程序存储并处理一组学生的学籍。 单个学生学籍的数据结构: 学号(num): int 型姓名(name) :char [ ] 型性别(sex):c
问题:学籍管理需要每个学生的下列数据:学号、姓名、性别、年龄、分数,请用 C 语言程序存储并处理一组学生的学籍。
单个学生学籍的数据结构:
在C语言中,定义结构体的语法格式如下:
struct 结构体名 { 类型 成员1; 类型 成员2; // ...};
其中,结构体名
是您自定义的结构体类型名称,可以根据需求进行命名。成员1
、成员2
等表示结构体的成员变量,每个成员都有自己的类型和名称。
定义结构体后,可以使用该结构体类型创建结构体变量,并访问结构体的成员。访问结构体成员的语法是使用结构体变量名后跟成员名,中间使用点.
进行连接。
结构体的使用:
struct 结构体名 变量名
struct 结构体名 变量名 = {成员1值,成员2值…}
定义结构体时顺便创建变量(这时候创建几个变量都可以,中间用逗号隔开,直接在创建的时候赋值也可以,例如:)
struct student{ int num; //学号 char name[16]; //姓名 float score; //成绩}stu5 = {1002,"lihua",89},stu6;
如果只想给一部分数据赋值的话:
struct 结构体名 变量名 = {.name = "cuiyi",.num = 111,};
下面是一个更完整的示例:
#include // 定义一个结构体struct Person { char name[50]; int age; float height;};int main() { // 创建一个结构体变量 struct Person person1; // 访问结构体的成员 strcpy(person1.name, "John"); person1.age = 25; person1.height = 1.75; // 输出结构体的成员 printf("Name: %s\n", person1.name); printf("Age: %d\n", person1.age); printf("Height: %.2f\n", person1.height); return 0;}
在上述示例中,我们定义了一个名为Person
的结构体,它包含了姓名、年龄和身高三个成员变量。然后,我们创建了一个名为person1
的结构体变量,并给它的成员赋值。最后,使用printf
函数输出结构体的成员值。
#include struct stu{char name[16];int age;float score;}s[3];int main(){struct stu s[3] = {{"zhangsan",18,500},{"lisi",18,530},{"wangwu",18,550}};int i;for (i = 0; i < 3; i++){printf("name=%s, age=%d, score=%f\n",s[i].name,s[i].age,s[i].score);}return 0;}
struct 结构体名 *指针名;
示例:
结构体数组和结构体指针
#include struct stu{char name[16];int age;float score;}s[3];int main(){struct stu s[3] = {{"zhangsan",18,500},{"lisi",18,530},{"wangwu",18,550}};struct stu *ps = s;//定义一个指针指向结构体数组int i;for (i = 0; i < 3; i++){printf("name=%s, age=%d, score=%f\n",(*(ps+i)).name,(*(ps+i)).age,(*(ps+i)).score);}return 0;}
在上面的代码中,一定要记得 (*(ps+i)) 才是一个大括号里面的值,这样才能 .name .age .score 。
struct 结构体名 {struct 结构体名 成员名;};
示例:
#include #include struct person{ char name[16]; int age; char sex;}; struct student{ struct person stu; float score;}; struct teacher{ struct person tea; char phone[12];}; int main(int arGC, const char *argv[]){ struct student s; strcpy (s.stu.name,"zhangsan"); s.stu.age = 12; s.stu.sex = 'm'; s.score = 98; printf("name = %s,age = %d, sex = %c, score = %f\n", s.stu.name, s.stu.age, s.stu.sex, s.score); struct teacher t; struct teacher *p = &t; strcpy (p->tea.name, "lisi"); p->tea.age = 54; //注意这里操作符 -> 的用法 p->tea.sex = 'w'; strcpy (p->phone, "13112341234"); printf("name = %s,age = %d, sex = %c, score = %s\n", t.tea.name, t.tea.age, t.tea.sex, t.phone); return 0;}
上述代码中,有一个部分用到了 p->tea.age 这种形式,这是因为p是指针,而 tea 只是一个普通变量,所以从 tea 出发不能用 ->,只有指针才可以使用这个操作符。
规则:(地址 / 有效地址) 必须是整数。
计算过程:
上述过程要注意:能不能整除只能决定每个变量开头的地址,具体要每一行的地址从开头的地址要写到几要看变量类型的 sizeof 是多少。比如有 double c,c的开头地址是 8 ,那么这个变量占的字节就是 8 9 10 11 12 13 14 15 这八个字节。
来源地址:https://blog.csdn.net/qq_44947439/article/details/132544620
--结束END--
本文标题: C语言 - 结构体、结构体数组、结构体指针和结构体嵌套
本文链接: https://www.lsjlt.com/news/382610.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0