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; }