结构体指针、数组指针和结构体数组指针
结构体指针
首先让我们定义结构体:
struct stu
{
char name[20];
long number;
float score[4];
};
再定义指向结构体类型变量的指针变量:
struct stu *student; /*定义结构体类型指针*/
student = malloc(sizeof(struct stu)); /*为指针变量分配安全的地址*/
结构体成员调用:
student->name
student->number
student->score
数组指针
int a[5]={1,2,3,4,5};
int *p=NULL;//创建一个空指针
p=a;//a数组首地址赋给p指针变量
//i遍历的方式
for(int i=0;i<5;i++)
{ //*(p+i)等价p[i],p+i等价&p[i]
printf("%d,%x,%d,%x\n",*(a+i),a+i,a[i],&a[i]);//输出方式1
printf("%d,%x,%d,%x\n",*(p+i),p+i,p[i],&p[i]);//输出方式2
}
//指针循环的方式遍历结构体
for(int* pint=a;pint<a+5;pint++)
{
printf("%d,x%\n",*pint,pint);//输出方式3
}
结构体数组指针
struct info {
char name[50];
int id;
}
stuct info myinfo[5]={{"xiaoming1",1},
{"xiaoming2",2},
{"xiaoming3",1},
{"xiaoming4",4},
{"xiaoming5",5}, };
struct info *px=myinfo;
//i遍历的方式
for(int i=0;i<5;i++)
{
// myinfo[i]等价* (myinfo+i)
printf("%s,%d\n",myinfo[i].name,myinfo[i].id);//输出方式1
printf("%s,%d\n",(*(myinfo+i)).name,(*(myinfo+i)).id);//输出方式2
//px等价myinfo,px[i]等价*(px+i)
printf("%s,%d\n",px[i].name,px[i].id);//输出方式1
printf("%s,%d\n",(*(px+i)).name,(*(px+i)).id);//输出方式2
}
//指针循环的方式遍历结构体
for(stuct info *p=myinfo;p<myinfo+5;p++)
{ //p->name等价(*p).name p->id等价(*p).id
printf("%s,%d\n",p->name,p->id);//输出方式3
printf("%s,%d\n",(*p).name,(*p).id);//输出方式4
}