思考:
1.结构体指针是什么?
2.为什么有结构体指针?
3.怎么实现结构体指针?(怎么用?)
解答:
1.答:所谓结构体指针就是指向结构体的变量的指针
引出思考:我们常见的结构体指针有哪些?
答:一个结构体变量的起始地址就是这个结构体变量的结构体指针。
9.3.1 指向结构体变量的指针
例如.1
struct Student *pt//pt可以指向struct Student类型的变量或数组元素
例9.5(这个例子主要是告诉你什么是结构体变量,你如何使用它。)
通过指向结构体变量的指针变量输出结构体变量中成员信息。
解题思路:
我所面对的问题
1.首先得有个结构体变量
2.其次得有个结构体指针
3.最后就是如何用结构体变量的指针输出结构体变量信息了。
因此问题就转化成解决结构体变量的构造和结构体指针的构造,还有使用输出的问题。
#include<stdio.h>
#include<string.h>//此处我在编写程序的时候忘记了导致回来在加
int main()
{
struct Student//结构体的初始化我忘了怎么实现
{
long num;
char name[20];
char sex;
float score;
};
struct Student stu_1;//此处我直接忘了定义 并且我也不知到为什么要有下划线
struct Student *pt;
pt=&stu_1;//下一步干什么呢?
stu_1.num=10101;//忘记给结构体赋初值了 并且结构体赋值方法也忘了
strcpy(stu_1.name,"Li Lin");//此处体现了字符串不能赋值只能用字符串赋值函数复制给stu_1.name
stu_1.sex='M';
stu_1.score=89.5;
printf("No.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);//输出结果
printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%5.1lf\n",(*pt).num,(*pt).name,(*pt).sex,(*pt).score);//此处就是结构体变量指针输出方法注意有()
return 0;
}
反思:
这个题目暴露了我不够严谨细致的思维。
而且在做题目期间还分神,暴露出专注力不足的毛病。
程序分析:
在主函数中声名了struct Student类型,然后定义一个struct Student 类型的变量stu_1.又定义了一个指针变量p,它指向一个struct Student 类型的对象。将结构体变量stu_1。有定义了一个指针变量p,它指向一个struct Student 类型的对象。将结构体变量stu_1的起始地址赋给指针变量p,也就使p指向stu_1见图1
然后对stu_1的各成员赋值。
第一个printf函数是通过结构体变量名stu_1访问它的成员,输出stu_1的各成员的值。用stu_1的各个成员的值。用stu_1.num表示stu_1访问它的成员,以此类推。第二个printf函数是通过指向结构体变量的指针变量访问它的成员,输出stu_1各成员的值,使用的是(*p).num这样的形式。(*p)表示 p指向的结构体变量,(*p).num是p所指向的结构体变量的成员num。注意*p两侧的括号不可省略,因为成员运算符"."优先于“*”运算符,*p.num就等价于*(p.num)。
特别说明:
为了使用方便和直观,C语言允许把(*p).num用p->num代替”->“代表一个箭头,p->num表示p所指向的结构体变量中的num成员。同样,(*p).name等价于p->name。"->"被称为指向运输符
如果p指向一个数据结构体变量stu,以下三种用法等价:
stu.成员名 | 例子:stu.num |
(*P).成员名 | 例子:(*p).num |
p->成员名 | 例子:p->num |