c结构体

结构体是一种新的数据类型

1 struct student{
2 int ID;
3 char name;
4 }; //声明一个结构体,student只是结构体的一个标签,在一个程序中可能有多个结构体
5 struct student stu1 //用结构体来声明一个变量
6 typedef struct student STUDENT; //给结构体起一个别名 STUDENT
7 STUDENT stu2;     //用这个别名来声明一个struct student 类型的变量
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


struct sample{
    int data;
    struct sample *next;
};

struct student{
    int ID;
    char name;
}stu1;// 直接定义一个struct student 类型的stu1

typedef struct student1{
    int ID;
    char name;
}STUDENT ;// 只是给结构体struct student1 定义一个别名

STUDENT stu2; //这里才是定义一个struct student1 的变量

//定义指向结构体变量的指针
//STUDENT *pt;
//pt=&stu2;
//上面的方法有问题,不能编译通过
//只能用下面的方法
STUDENT *pt=&stu2;

//通过结构体指针访问结构体
//(*pt).ID = 1;不能编译通过啊!


void func(STUDENT stu)
{
  //结构体作为参数传递给函数,上面的STUDENT stu想对于以下的二条操作
  //stu=stu2
  //stu.ID=stu2.ID;
  //stu.name=stu2.name;
  stu.ID=0;
  stu.name='u';
}
//上面的func并不改变stu2的值,但下面的可以
void funp(STUDENT *p)
{
  p->ID=1;
  p->name='z';
}
//想用指针但有不想改变原来的值用const
/*  void funp_const(const STUDENT *p) */
/* { */
/*   p->ID=1; */
/*   p->name='z'; */
/* } */
/*  */

int main()
{
  stu2.ID=1;
  (*pt).ID=2;
  pt->ID=3;
  //上面三个都不能在main()外写,也就是说访问结构体成员必须在main里面

  func(stu2);
  printf("%d %c",stu2.ID,stu2.name);
  funp(&stu2);
  printf("%d %c",stu2.ID,stu2.name);
  return 0;
}

原文地址:https://www.cnblogs.com/been/p/4244487.html