C语言结构体指针的用法(附带实例,新手必看)
所谓结构体指针,就是将一个结构体变量的起始地址存放在一个指针变量中,这个指针变量指向该结构体变量,这样的指针就叫做结构体指针。
结构体指针变量的类型必须与结构体变量的类型相同,结构体指针的定义形式为:
【实例】通过结构体指针变量访问成员。代码如下:
在第二种方法中,“.”的优先级高于“*”,(*pt) 两侧的括号不能省,若去掉括号,写成 *pt.title,则系统会认为是 *(pt.title),意义就不对了。
在第三种方法中,“->”为指向运算符。book_1.title、(*pt).title 和 pt->title 这三者是等价的。
【实例】指向结构体的指针。
第一次循环 pt 指向 student[0],条件判断符合,输出 student[0] 的值,执行 pt++ 后,pt 指向 student[1]。第二次循环,条件判断符合,输出 student[1] 的值,执行 pt++ 后,pt 指向 student[2]。第三次循环,pt 中存放的地址已经大于 student[2] 的地址,条件不符合,退出 for 循环。
结构体指针变量的类型必须与结构体变量的类型相同,结构体指针的定义形式为:
struct 结构体名 *变量名;
【实例】通过结构体指针变量访问成员。代码如下:
#include <string.h>
#include <stdio.h>
struct book
{
char title[20];
long id;
int price;
};
int main( )
{
struct book book_1;
struct book *pt;
pt = &book_1;
//对book_1进行初始化
strcpy( book_1.title,"C语言入门教程");
book_1.id = 1;
book_1.price = 49.9;
//通过结构体变量访问成员
printf("书名:%s 编号:%ld 价格:%d\n",book_1.title,book_1.id,book_1.price);
//通过结构体指针变量访问成员
printf("书名:%s 编号:%ld 价格:%d\n",(*pt).title,(*pt).id,(*pt).price);
printf("书名:%s 编号:%ld 价格:%d\n",pt->title,pt->id,pt->price);
return 0;
}
编译运行,结果如下:
书名:C语言入门教程 编号:1 价格:49 书名:C语言入门教程 编号:1 价格:49 书名:C语言入门教程 编号:1 价格:49可以看到,当结构体指针变量 pt 指向结构体变量 book_1 时,有以下 3 种方法访问 book_1 中的成员值:
- book_1.成员名,如 book_1.title;
- (*pt).成员名,如 (*pt).title;
- pt->成员名,如 pt->title。
在第二种方法中,“.”的优先级高于“*”,(*pt) 两侧的括号不能省,若去掉括号,写成 *pt.title,则系统会认为是 *(pt.title),意义就不对了。
在第三种方法中,“->”为指向运算符。book_1.title、(*pt).title 和 pt->title 这三者是等价的。
【实例】指向结构体的指针。
#include <stdio.h>
#define STU_NUM 2
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
float score; //成绩
}student[STU_NUM] = {
{"张三", 1, 18, 97},
{"李四", 2, 19, 96},
}, *pt;
int main()
{
printf("Name\tNum\tAge\tScore\t\n");
for(pt=student; pt<=student+(STU_NUM-1); pt++)
{
printf("%s\t%d\t%d\t%.1f\n",
pt->name, pt->num, pt->age, pt->score);
}
return 0;
}
编译运行,结果如下:
Name Num Age Score 张三 1 18 97.0 李四 2 19 96.0可以看到,数组长度为 2,在 for 语句中先让结构体指针变量 pt 指向结构体数组 student 的首地址,即结构体数组 student[0] 的地址。
student+(STU_NUM−1) 即 student+1,也就是 student[2]的地址,因此,for 的判断条件为结构体指针变量 pt 存放的地址是否小于等于 student[2] 的地址。pt++ 使得结构体指针变量 pt 自加 1,结构体指针变量 pt 加 1 意味着结构体指针变量 pt 所增加的值为结构体数组 student 的一个元素所占的字节数。第一次循环 pt 指向 student[0],条件判断符合,输出 student[0] 的值,执行 pt++ 后,pt 指向 student[1]。第二次循环,条件判断符合,输出 student[1] 的值,执行 pt++ 后,pt 指向 student[2]。第三次循环,pt 中存放的地址已经大于 student[2] 的地址,条件不符合,退出 for 循环。
ICP备案:
公安联网备案: