柏虎资源网

专注编程学习,Python、Java、C++ 教程、案例及资源

C语言入门:结构指针_c语言结构体指针链表知识点

我们已经学过结构体,结构体也叫结构,是一种数据类型。

结构类型定义的语法格式如下:

例如:

struct STU

{

char xh[10];

char xm[20];

float cj;

};

我这里定义了一个学生类型,类型名为STU,有3个成员:学号(xh, 字符串)、姓名(xm, 字符串)、成绩(cj,实数型)。

定义了结构类型,那么就可以定义结构类型的变量了。如:

struct STU

{

char xh[10];

char xm[20];

float cj;

};

struct STU x, y;

定义两个结构变量:x和y。

因为每个结构变量都由不同类型的成员组成,我们使用结构变量,其实就是为了使用这些成员,结构变量成员的引用语法格式为:

结构变量名 .结构成员名

如上例,我们定义了一个结构变量x,x的成绩为100分,可以这样引用:

x.cj = 100 ;

我们写程序时,可以把结构类型的定义写在main函数的外面,在main函数里定义结构变量。

以上是我们以前学过的。

今天学习一个新内容:结构指针。

一、结构指针的定义

结构指针是指向结构体变量的指针,其定义方式与普通指针类似,只需在指针类型前加上struct关键字和结构体名称。

// 定义结构体

struct Student {

char name[50];

int age;

float score;

};

// 定义结构指针

struct Student *ptr;

二、结构指针的使用

结构指针可以通过取地址运算符&来初始化,指向已存在的结构体变量。

通过结构指针访问结构体成员有两种方法:

(1)使用箭头运算符->

(2)使用间接运算符*配合点运算符.

我们先来看普通的结构变量:

假设有定义:

struct Student {

char name[50];

int age;

float score;

};

struct Student x;

struct Student *p;

上述定义中,x是普通的结构变量,p则是结构指针变量。

如果执行了:

p=&x;

即p指向了x,此时既可以直接用x来访问Student的成员,也可以间接利用p来访问Student的成员。

三、结构指针变量访问结构体成员

但是要注意,用x访问Student的成员name、age、score的形式如下:

x.name, x.age, x.score

但我们不能直接用p来访问这些成员,即不能:

p.name, p.age, p.score

而是只能:

(*p).name, (*p).age, (*p).score

因为p指向x, p实际上存放的是x的地址,而*p才是x。

所以

x.name, x.age, x.score

等价于:

(*p).name, (*p).age, (*p).score。

在C语言里,可以用p->箭头代替这里的(*p).

即:

x.name, x.age, x.score

等价于:

(*p).name, (*p).age, (*p).score。

也等价于:

p->name, p->age, p->score。

所以,如果在程序中发现了一个变量加一个箭头的,如p->,那么这个变量一定一个结构指针变量,它通过这个箭头->来访问结构体的成员。

程序1:

上述程序中:

也可以写成:

在上述程序中,出现了一些我们以前没讲过的地方,如:

以及:

这是因为我们这里应用了一个系统函数strcpy( ),这个系统函数在头文件<string.h>中定义,如果要用strcpy( )这个函数,就必须引入头文件:

#include <string.h>

strcpy(s1.name, "张三");的意思是将第二个参数(上述是字符串”张三”)赋值给第一个参数(s1.name)。

可能有朋友会问:

为什么不用:

s1.name=”张三”;

而必须用:

strcpy(s1.name, "张三");

来赋值?

大家看看s1.name是什么类型?没错,是字符数组,char name[50];

所以s1.name就是数组名,以前讲过,数组名是不能写在赋值号(=)左边的,它只能用strcpy(s1.name, "张三");来赋值,不能用s1.name=”张三”;来赋值。

以下是程序1代码,可以直接复制运行。

#include <stdio.h>

#include <string.h>

struct Student {

char name[50];

int age;

float score;

};

int main() {

// 定义结构体变量

struct Student s1;

strcpy(s1.name, "张三");

s1.age = 20;

s1.score = 89.5;

// 初始化结构指针

struct Student *ptr = &s1;

// 使用箭头运算符访问成员

printf("姓名: %s\n", ptr->name);

printf("年龄: %d\n", ptr->age);

printf("分数: %.1f\n", ptr->score);

}

这篇文章的内容有点不好理解,因为涉及到指针。

可以多看几遍,多复习一下之前讲过的指针的内容。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言