C语言中的结构体是一种用户自定义的数据类型,它可以用来存储不同类型的数据。它可以将多个不同类型的数据存储在一个单独的变量中,这样就可以方便地处理这些数据。
使用结构体时,首先需要定义一个结构体,然后声明一个变量来存储该结构体。定义一个结构体时,需要使用struct关键字,然后在大括号内声明所有成员变量。例如:
struct student { char name[20]; int age; float score; };
上面的代码声明了一个student结构体,其中包含三个成员变量name、age和score。声明完成之后,就可以使用student来声明一个新的student变量了。例如:
struct student stu;
上面的代码声明了一个新的student变量stu。此时stu就是一个student类型的对象,其中包含name、age和score三个成员变量。要访问这三个成员变量,则需要使用“.”运算符来访问。例如:
strcpy(stu.name, "Tom"); // 赋值name stu.age = 20; // 赋值age stu.score = 90.5; // 赋值score
上面的代码分别将name、age和score三个成员赋予了不同的值。此外,也可以使用“->”运算来访问成员变量。例如:
struct student *ptr; // 声明一个student 类型的指针ptr ptr->name = "Tom"; // 赋值name ptr->age = 20; // 赋值age ptr->score = 90.5; // 赋值score
上面代衠中ptr是一个student 类型的指针(即ptr执行student 类型对象地址) ;考虑到ptr是一个指针 ︴因此不能直接使用“.”运街去访间成呗 及耳 ︴必 须使用“- > ”运街原 才能够正常场 力 我 我 我 我 我 我 我 我 我 我 我 我 我 p >
双向列表可以通过任一方向列出。
除了指向下一个结构体的指针之外,我们还需要在每个结构体中添加一个额外的指针来存储先前结构体的地址。
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
typedef struct Dog Dog; // Define Dog as a type name
struct Dog // Structure type definition
{
int age;
int height;
char name[20];
char father[20];
char mother[20];
Dog *next; // Pointer to next structure
Dog *previous; // Pointer to previous structure
};
int main(void) {
Dog *first = NULL; // Pointer to first Dog
Dog *current = NULL; // Pointer to current Dog
Dog *last = NULL; // Pointer to previous Dog
char test = "0"; // Test value for ending input
for( ; ; ) {
printf_s("Do you want to enter details of a%s Dog (Y or N)? ", first != NULL?"nother" : "");
scanf_s(" %c", &test, sizeof(test));
if(tolower(test) == "n")
break;
// Allocate memory for each new Dog structure
current = (Dog*) malloc(sizeof(Dog));
if(first == NULL){
first = current; // Set pointer to first Dog
current->previous = NULL;
} else {
last->next = current; // Set next address for previous Dog
current->previous = last; // Previous address for current Dog
}
printf_s("Enter the name of the Dog: ");
scanf_s("%s", current->name, sizeof(current->name));
printf_s("How old is %s? ", current->name);
scanf_s("%d", ¤t->age);
printf_s("How high is %s ( in hands )? ", current -> name );
scanf_s("%d", ¤t->height);
printf_s("Who is %s"s father? ", current->name);
scanf_s("%s", current->father,sizeof(current->father));
printf_s("Who is %s"s mother? ", current->name);
scanf_s("%s", current->mother, sizeof(current->mother));
current->next = NULL; // In case it"s the last...
last = current; // ...save its address
}
// Now tell them what we know.
printf_s("n");
while(current != NULL) // Output Dog data in reverse order
{
printf_s("%s is %d years old, %d hands high,",
current->name, current->age, current->height);
printf_s(" and has %s and %s as parents.n", current->father,
current->mother);
last = current; // Save pointer to enable memory to be freed
current = current->previous; // current points to previous in list
free(last); // Free memory for the Dog we output
last = NULL;
}
first = NULL;
return 0;
}
上面的代码生成以下结果。
C 练习实例61 - 杨辉三角形 C 语言经典100例题目:打印出杨辉三角形(要求打印出10行)。程序分析:结构如下所示:1111211331146...
C 库宏 - assert() C 标准库 - assert.h描述C 库宏 void assert(int expression) 允许诊断信息被写入到标准错误文件中。换句话说...
C 库函数 - sin() C 标准库 - math.h描述C 库函数 double sin(double x) 返回弧度角 x 的正弦。声明下面是 sin() 函数的声明。do...
C 库函数 - modf() C 标准库 - math.h描述C 库函数 double modf(double x, double *integer) 返回值为小数部分(小数点后的部分...
同一 Page 内导航当发起导航的 AbilitySlice 和导航目标的 AbilitySlice 处于同一个 Page 时,您可以通过 present() 方法实现导...
HarmonyOS 提供了 Ability 和 AbilitySlice 两个基础类。有界面的 Ability 绑定了系统的 Window 进行 UI 展示,且具有 生命周期...