结构体与指针

下面来介绍如何使用指针来访问结构体以及结构体中的成员数据。先定义一个结构体类型如下表:

typedef struct _student

{

       int id;

       int age;

       char name[20];

       char sex;

       float score;

} student, *pstudent;

再定义并初始化一个结构体变量s和结构体指针变量ps指向结构体变量s:

student  s = {1,30,”tom”,’M’,59.5f};

student *ps=&s;

这个时候,可以使用ps->运算符来访问结构体中的成员,比如:

printf(“id:%d,age:%d,name:%s,sex:%c,score:%f\n”,

ps->id,ps->age,ps->name,ps->sex,ps->score);

   

我们也可以在堆上申请内存来存放结构体中的数据,比如:

 

       student * pstdt = (student*)malloc(sizeof(student));

       if(pstdt)

       {

              memset(pstdt, 0, sizeof(student));

              pstdt->age = 19;

              pstdt->id = 1001;

              strcpy(pstdt->name, "tom");

              pstdt->score = 99.5;

              pstdt->sex = 'M';

              printf("id:%d,age:%d,name:%s,sex:%c,score:%f\n",

                  pstdt->id, pstdt->age,pstdt->name,pstdt->sex,pstdt->score);

              free(pstdt);

              pstdt = NULL;

       }

注意,需要再次强调的是,结构体指针在进行加减运算的时候,加减的步长是结构体单位长度的倍数。比如:

student *ps=&s;

ps = ps + n;//n为某个整数

这里的n代表的不是n个字节,而是nsizeof(student)的字节。也就是在完成上面的计算后,ps向前移动了n*sizeof(student)这么多个字节。

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注