C语言_了解下结构体指针
在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。当然也可以指向结构体,先看一个小案例:
#include <stdio.h> #include <string.h> typedef struct PERSON { int age; int height; char name[15]; } Person; int main (){ Person p = {28, 178, "phper"}; //别名 Person *p_s = &p; //定义结构体指针 printf("%d\t%d\t%s",p_s->age, p_s->height, p_s->name); //等价于 (*p_s).age (*p_s)表示p_s指向的结构体变量 return 0; }
再看一个案例:
#include <stdio.h> #include <string.h> #include <malloc.h> typedef struct PERSON { int age; int height; char name[15]; } Person; int main (){ Person *p_s = (Person *)malloc(sizeof(Person)); //计算结构体Person大小,并分配相应的内存空间,也可以传参(struct PERSON),再强制转化指针格式 memset(p_s, 0, sizeof(Person)); //分配好空间内容是随机的,用函数初始化全部清空为0 //指针指向的是p_s的首地址 printf("请输入年龄:"); scanf("%d", &p_s->age); printf("请输入身高:"); scanf("%d", &p_s->height); printf("请输入名字:"); scanf("%s", p_s->name); printf("%d\t%d\t%s",p_s->age, p_s->height, p_s->name); //等价于 (*p_s).age (*p_s)表示p_s指向的结构体变量 return 0; }
指向数组结构体的指针案例:
# include <stdio.h> # include <stdlib.h> # include <string.h> //创建一个结构体 struct Programmer { int salary; int experience; char type[15]; }programmer[3]= { {18000, 3, "PHP"}, {15000, 1, "GO"}, {19000, 3, "JAVA"}, }; int main () { struct Programmer *pProgrammer; int index; pProgrammer = programmer; for(index=0; index<3; index++,pProgrammer++) //index++后面还有一句控制着指针的移动,循环完一次,指针将指向下一个地址中的成员 { printf("编号%d \n",index+1); printf("薪资:%d\n", pProgrammer->salary); printf("经验-年:%d\n", pProgrammer->experience); printf("岗位:%s\n", pProgrammer->type); } printf("pProgrammer:%d\n&student[2]:%d\n",pProgrammer,&programmer[3]); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!