您的位置:首页 > 其它

结构体指针

2015-06-28 00:13 232 查看
1)结构指针定义和初始化

a、指向结构体变量的指针

①一个指针变量用来指向一个结构体变量时,称之为结构体指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。

②一般形式:

struct 结构名 *结构指针变量名

与前面的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。

赋值是把结构体变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。

③什么是结构体指针?

用来存放结构体变量地址的指针变量。

④结构体指针定义

格式:

struct 结构体名 *指针变量名

代码:

struct Car{

int lunzi;

int speed;

};

b、结构名、结构体变量名、结构体指针

结构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。结构指针变量,就是用来存储结构体变量地址的,就能更方便地访问结构变量的各个成员。

2)结构体指针间接访问成员值

a、指向结构体变量的指针

其访问的一般形式为:

(*结构体指针变量).成员名

例如:

(*pstu).num

或:

结构指针变量->成员名

例如:

pstu->num

b、结构体变量的成员值

struct Stuent{

int age;

char *name;

};

struct Stuent stu1={17,"张三"};//成员值有两个①stu1.age ②stu1.name

c、用结构体指针间接访问结构体变量的成员值

struct Student *p=&stu1;

//使用p 获取 18 和 张三丰

两种方法:

方法一:

①(*p).age;//访问年龄

②(*p).name;//访问姓名

需要注意:(*p)两侧的括号不可少,因为成员符"."的优先级高于"*".

如果去掉括号写作*p.age则等效于*(p.age),这样意义就完全不对了。

方法二:

①p->age //访问年龄

②p->name //访问姓名

3)结构体嵌套使用

a、结构体嵌套使用

成员也可以又是一个结构,即构成了嵌套的结构。

结构体嵌套:结构体定义的里面有其他结构体。

结构体不可以嵌套自己的变量,但是可以嵌套指向自己这种类型的指针。

b、注意事项:

①结构体定义中可以嵌套其他结构体类型的变量;

②结构体定义中不可以嵌套自己这个类型的变量;

③可以嵌套自己类型的指针

例如:

//定义一个Date的结构体

struct Date{

int year;

int month;

int day;

};

//定义了一个学生的结构体

struct Student{

char *name;

int age;

float score;

//错误写法 struct Student stu;//这种写法是错误的,不能在自己说嵌套自己类型的结构

struct Student *stu;//这种写法是正确的

struct Date birthday;

};

c、嵌套结构体如何进行初始化

struct Student stu1={"张三丰",19,80f,{1991,12,12}};//定义了一个结构体变量

d、嵌套的结构体如何进行访问

printf("姓名:%s,年龄:%d(生日:%d-%02d-%02d),成绩:%.2f\n",stu1.name,stu1.age,stu1.birthday.year,stu1.birthday.month,stu1.birthday.day);

c、多级嵌套

例如:

//定义一个Time的结构体

struct Time{

int hour;

int min;

int sec;

};

//定义一个Date的结构体

struct Date{

int year;

int month;

int day;

//嵌套time结构体

struct Time time;

};

//定义了一个学生的结构体

struct Student{

char *name;

int age;

float score;

//错误写法 struct Student stu;//这种写法是错误的,不能在自己说嵌套自己类型的结构

struct Student *stu;//这种写法是正确的

struct Date birthday;

};

c、嵌套结构体如何进行初始化

struct Student stu1={"张三丰",19,80f,{1991,12,12,{12,12,12}}};//定义了一个结构体变量

d、嵌套的结构体如何进行访问

printf("姓名:%s,年龄:%d(生日:%d-%02d-%02d %02d:%02d:%02d),成绩:%.2f\n",stu1.name,stu1.age,stu1.birthday.year,stu1.birthday.month,stu1.birthday.day,stu1.birthday.time.hour,stu1.birthday.time.min,stu1.birthday.sec,stu1.score);

4)结构体嵌套自身的指针

struct Person{

char *name;

int age;

//嵌套自己类型的指针

struct Person *child;

};

//结构体嵌套自身指针的初始化

//定义kim

struct Person kim={"Kimmy",8,NULL};

//struct Person *child=&kim;

struct Person p1={"林志玲",30,&kim};

//结构体 嵌套自身指针的访问

printf("%s的儿子是:%s,儿子的年龄是:%d\n",p1.name,(*p1.child).name,(*p1.child).age);

或者:

printf("%s的儿子是:%s,儿子的年龄是:%d\n",p1.name,p1.child->name,p1.child->age);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: