结构体指针

//定义结构体
typedef struct str
{
int uid;
char name[20];
info_t* info;        //保留字段,指向内存堆字段
int age;
} stu_t;
//创建结构体指针,存放某一个结构体变量的首地址
stu_t*  p2stu = NULL;

//重命名结构体指针名

//typedef将使得原来申明的结构体变量成为数据类型

typedef stu_t* p2stu_t;

//创建结构体指针,存放某一个结构体变量的首地址

 //stu_t * p0,p6,p7=NULL;    //!!!错误,这样赋值p0是指针,p6,p7是结构体类型

  p2stu_t p2stu = NULL;

   p2stu_t p1,p2,p3=NULL;

   stu_t students[5] = {};     //结构体初始化

********************************************************************************

for (int i=0; i<2; i++) {

        students[i].sid = i+1;

        printf("请输入第%d个学员的姓名:",students[i].sid);

        scanf("%s",students[i].name);

        printf("请输入第%d个学员的年龄:",students[i].sid);

        scanf("%d",&students[i].age);


        

    }

    printf("\n+++++++++++++++++++++++++++++++++\n");

    printf("学号\t\t姓名\t\t\t年龄\n");


  int j=0;

  for (p2stu=students,j=0; j<2; p2stu++,j++) {

      printf("%d\t\t%s\t\t%d\n",p2stu->sid,p2stu->name,p2stu->age);

  }



char buffer[512] = "";       //静态申请内存

#include <stdlib.h>

stu->name = (char*)malloc(20);   //动态内存空间申请 

malloc申请的空间在内存的堆空间.任何函数都能使用,对空间的使用是全局的,

使用时须传递该空间的首地址

   //第一条学生记录的姓名的内存空间被释放

    free(students->name);

    students->name = NULL;

   if (stu->name == NULL) {

       printf("内存空间不足,程序退出.\n");

       exit(-1);

   }


    //学生记录的姓名的内存空间被全部释放

    for (int i=0; i<3; i++) {

        free(students[i].name);

      free(students[i].name);    //同一个malloc的地址被释放两次程序将崩溃(已经是null的没关系)

        students[i].name = NULL;

    }



************************************结构体指针数组******************************


stu_t* studentps[5] = null;


//链接列表

typedef struct stu{

    int sid;

    char name[20];

    int age;

    struct stu * right;

    struct stu * left;   //结构体的递归指针


}stu_t, *p2stu_t;


typedef struct{

    int mid;

    char name[20];

    int age;

    //struct* right   ——>error:匿名结构体不能声明结构体递归指针/用来封装结构体,


} member_t;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值