在C语言中,数组之后,结构是程序员可用的最重要的数据结构。
我们将了解不同的方法来初始化结构内存并访问结构中的元素。
创建简单的结构并访问其中的元素
在这个例子中,我们将在main内部创建一个结构变量,并在堆栈中分配内存。
下面是一个“student”具有2个元素的结构。一个用于保存名称的char数组,一个用于保存卷号的int变量。
然后我们在main内部创建一个结构变量,这样它将在堆栈内部创建内存。
然后,由于我们已静态分配了内存,因此可以按点访问元素“.” operators.
例:
#include<stdio.h> #include<stdlib.h> #include<string.h> struct 学生_database { char name[30]; int roll_no; }; int main() { struct 学生_database stud = {"jane", 2}; printf("Student name = %s \n", stud.name); printf("Student roll no = %d \n", stud.roll_no); return 0; }
输出:
Student name = jane Student roll no = 2
为结构动态分配内存并访问其中的元素
要动态分配内存,您需要使用malloc。
这将在堆段中分配内存。
要访问元素,您需要使用箭头运算符“->”.
例:
#include<stdio.h> #include<stdlib.h> #include<string.h> struct 学生_database { char name[30]; int roll_no; }; int main() { struct 学生_database *stud = NULL; stud = (struct 学生_database*) malloc(sizeof(struct 学生_database)); stud->roll_no = 30; strcpy(stud->name, "Jane Doe"); printf("Student name = %s \n", stud->name); printf("Student roll no = %d \n", stud->roll_no); return 0; }
输出:
Student name = Jane Doe Student roll no = 30
使用char指针创建简单的结构并访问其中的元素
在这个例子中,我们将在main内部创建一个结构变量,并在堆栈内部分配内存。
下面是一个“student”具有2个元素的结构。一个char指针,用于保存名称,int变量,用于保存卷号。
然后我们在main内部创建一个结构变量,这样它将在堆栈内部创建内存。
一旦为结构变量,char指针创建了静态内存,就只会分配该指针的内存。
因此,您需要为要保留的字符串显式分配内存。这是在动态内存管理的帮助下完成的。
然后,由于我们已静态分配了内存,因此可以按点访问元素“.” operators.
例:
#include<stdio.h> #include<stdlib.h> #include<string.h> struct 学生_database { char *name; int roll_no; }; int main() { struct 学生_database stud; stud.name = (char*) malloc(sizeof("www.ProdeveloperTutorial.com")+1); strcpy(stud.name, "www.ProdeveloperTutorial.com"); stud.roll_no = 20; printf("Student name = %s \n", stud.name); printf("Student roll no = %d \n", stud.roll_no); return 0; }
输出:
Student name = www.ProdeveloperTutorial.com Student roll no = 20
使用char指针创建简单的结构并访问其中的元素。动态分配内存。
同样在这里,当我们为结构动态分配内存时,空间仅分配给char指针。
因此,您需要分配内存以动态容纳字符串。
#include<stdio.h> #include<stdlib.h> #include<string.h> struct 学生_database { char *name; int roll_no; }; int main() { struct 学生_database *stud = NULL; stud = (struct 学生_database*) malloc(sizeof(struct 学生_database)); stud->roll_no = 30; stud->name= (char *) malloc( sizeof("Jane Doe")+1); strcpy(stud->name, "Jane Doe"); printf("Student name = %s \n", stud->name); printf("Student roll no = %d \n", stud->roll_no); return 0; }
输出:
Student name = Jane Doe Student roll no = 30
如何访问结构内部的结构元素:
#include<stdio.h> #include<stdlib.h> #include<string.h> struct 学生_detail { char name[40]; int roll_no; }; struct 学生_database { struct 学生_detail detail; int percentage; }; int main() { // statically allocated memory struct 学生_database 学生_database_1; 学生_database_1.percentage = 80; 学生_database_1.detail.roll_no = 30; strcpy(student_database_1.detail.name, "Jane Doe"); printf("Student 1 percentage = %d\n", 学生_database_1.percentage); printf("Student 1 roll_no = %d\n", 学生_database_1.detail.roll_no); printf("Student 1 name = %s\n", 学生_database_1.detail.name); struct 学生_database *student_database_2; 学生_database_2 = (struct 学生_database*) malloc(sizeof(struct 学生_database)); 学生_database_2->percentage = 70; 学生_database_2->detail.roll_no = 10; strcpy(student_database_2->detail.name , "New John"); printf("Student 2 percentage = %d\n", 学生_database_2->percentage); printf("Student 2 roll_no = %d\n", 学生_database_2->detail.roll_no); printf("Student 2 name = %s\n", 学生_database_2->detail.name); return 0; }
输出:
Student 1 percentage = 80 Student 1 roll_no = 30 Student 1 name = Jane Doe Student 2 percentage = 70 Student 2 roll_no = 10 Student 2 name = New John
按值将结构传递给函数
#include<stdio.h> #include<stdlib.h> #include<string.h> struct 学生_database { char name[30]; int roll_no; }; void display_data(struct 学生_database stud) { printf("Student name = %s \n", stud.name); printf("Student roll no = %d \n", stud.roll_no); } int main() { struct 学生_database stud = {"jane", 2}; display_data(stud); return 0; }
输出:
Student name = jane Student roll no = 2
通过引用将结构传递给函数
#include<stdio.h> #include<stdlib.h> #include<string.h> struct 学生_database { char name[30]; int roll_no; }; void display_data(struct 学生_database *stud) { printf("Student name = %s \n", stud->name); printf("Student roll no = %d \n", stud->roll_no); } int main() { struct 学生_database stud = {"jane", 2}; display_data(&stud); return 0; }
输出:
Student name = jane Student roll no = 2
将结构返回给函数
#include<stdio.h> #include<stdlib.h> #include<string.h> struct 学生_database { char name[30]; int roll_no; }; struct 学生_database* get_data() { struct 学生_database *stud = NULL; stud = (struct 学生_database*) malloc(sizeof(struct 学生_database)); stud->roll_no = 30; strcpy(stud->name, "Jane Doe"); return stud; } int main() { struct 学生_database *stud = NULL; stud = get_data(); printf("Student name = %s \n", stud->name); printf("Student roll no = %d \n", stud->roll_no); return 0; }
输出:
Student name = Jane Doe Student roll no = 30