结构体指针
一个结构体变量的指针就是该变量所占据内存段的起始地址。可以设置一个指针变量,用它指向一个结构体变量,此时该指针的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素,从而能够通过结构体指针快速访问结构体内的每个成员。
#include <stdio.h>
struct student
{
int num;
char name[20];
char sex;
};//4+20+4(1补成4)=28
//结构体指针练习
int main() {
struct student s={1001,"longNima",'M'};
struct student sarr[3]={1001,"longNima",'M',1002,"laiFu",'F',1003,"wangCai",'M'};
struct student *p;//定义结构体指针
p=&s;//赋值 s的首地址给p
//方式一
printf("%d %s %c\n",(*p).num,(*p).name,(*p).sex);
//方式二 一般都用方式二
printf("%d %s %c\n",p->num,p->name,p->sex);
p=sarr;//等价于p=&sarr[0]; 指向第一个元素
printf("%d %s %c\n",p->num,p->name,p->sex);
printf("--------------------------------------------\n");
p=p+1;//偏移一个基类型大小
printf("%d %s %c\n",p->num,p->name,p->sex);
return 0;
}
typedef的使用
#include <stdio.h>
//stu 等价于 struct student ,pstu等价于 struct student*
typedef struct student
{
int num;
char name[20];
char sex;
}stu ,*pstu;//结构体指针别名
typedef int BIGint;//方便修改特定的都是int型数据的变量
//typedef d的作用就是起别名
int main() {
stu s={1001,"www",'F'};//与struct student s={0}效果一样 但这样更方便
//这两种方式实际一样,都是定义了结构体指针变量,但第二种更常用
stu *p=&s;
pstu p1=&s;
BIGint num=10; //可以定义与成员名相同的变量
printf("BIGint num=%d,p->num=%d\n",num,p->num);
return 0;
}