c语言中结构体是一个非常常用的数据类型,指针也是c语言中的一种常见数据类型。结构体指针则是两者的结合,可以说是一种非常重要的概念。
在c语言中可以定义结构体类型,也可以通过指针来访问结构体的成员。如下所示:
```c
struct Student{
char name[20];
int age;
int score;
};
struct Student stu = {"Lily", 18, 90};
struct Student *p = &stu;
printf("%s %d %d", p->name, p->age, p->score);
```
在这个例子里,我们定义了一个名为Student的结构体类型,定义了一个名为stu的结构体变量,并且定义了一个Student类型的指针p,指向结构体变量stu。通过结构体指针p来访问成员,可以使用‘->’运算符。
除了通过定义变量的方式来使用结构体指针,我们还可以使用动态分配内存的方式,来创建结构体变量,然后通过指针来访问成员,如下例所示:
```c
struct Student *p = (struct Student*)malloc(sizeof(struct Student));
strcpy(p->name, "Lily");
p->age = 18;
p->score = 90;
printf("%s %d %d", p->name, p->age, p->score);
free(p);
```
在这个例子中,我们使用malloc函数来动态分配内存,然后将其强制类型转换为struct Student类型的指针p,最后通过指针来访问结构体成员。需要注意的是,在使用完毕后,需要使用free函数来释放动态分配的内存。
结构体指针也经常用作函数的参数,如下例所示:
```c
void printStudent(struct Student *p){
printf("%s %d %d", p->name, p->age, p->score);
struct Student stu = {"Lily", 18, 90};
printStudent(&stu);//结构体变量的地址传递给函数
```
在这个例子中,我们定义了一个名为printStudent的函数,并将结构体指针作为其参数,在函数内部通过指针来访问结构体的成员,可以打印出结构体的内容。
在c语言中,结构体指针是一种非常重要的概念,使用结构体指针可以方便地访问结构体成员,动态分配内存等。在实际编程中,需要娴熟掌握结构体指针的使用,避免出现内存泄漏等问题。