c语言结构体指针经典案例,结构体指针,C语言结构体指针详解

结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针。

指向结构体变量的指针

前面我们通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针。

前面讲过,&student1 表示结构体变量 student1 的首地址,即 student1 第一个项的地址。如果定义一个指针变量 p 指向这个地址的话,p 就可以指向结构体变量 student1 中的任意一个成员。

那么,这个指针变量定义成什么类型呢?只能定义成结构体类型,且指向什么结构体类型的结构体变量,就要定义成什么样的结构体类型。比如指向 struct STUDENT 类型的结构体变量,那么指针变量就一定要定义成 struct STUDENT* 类型。

下面将前面的程序用指针的方式修改一下:

# include

# include

struct AGE

{

int year;

int month;

int day;

};

struct STUDENT

{

char name[20]; //姓名

int num; //学号

struct AGE birthday; //生日

float score; //分数

};

int main(void)

{

struct STUDENT student1; /*用struct STUDENT结构体类型定义结构体变量student1*/

struct STUDENT *p = NULL; /*定义一个指向struct STUDENT结构体类型的指针变量p*/

p = &student1; /*p指向结构体变量student1的首地址, 即第一个成员的地址*/

strcpy((*p).name, "小明"); //(*p).name等价于student1.name

(*p).birthday.year = 1989;

(*p).birthday.month = 3;

(*p).birthday.day = 29;

(*p).num = 1207041;

(*p).score = 100;

printf("name : %s\n", (*p).name); //(*p).name不能写成p

printf("birthday : %d-%d-%d\n", (*p).birthday.yea

你可能感兴趣的:(c语言结构体指针经典案例)