结构体

结构体

  为什么会出现结构体

    为了表示一些复杂的数据,而普通的基本类型的变量无法满足要求

  什么叫结构体

    结构体是用户根据自己的实际需要定义的复合数据类型

#include <stdio.h>
#include <string.h>

struct Student
{
    int sid;
    char name[200];
    int age;
}; //分号不能省

int main()
{
    struct Student st = {1000, "zhangyan", 20};
    printf("%d %s %d
",st.sid, st.name, st.age);
    
    st.sid = 99;
    //st.name = "lisi";  //error
    strcpy(st.name, "lisi");
    st.age = 20;
    printf("%d %s %d
",st.sid,st.name, st.age);
    return 0;
}

  如何使用结构体

    两种方式:

      struct Student st = {1000, "zhangyan", 20};

      struct Student * pst = &st; 

        1. 通过结构体变量名来实现:st.sid

        2.通过指向结构体变量的指针来实现重点

         pst -> sid  pst这个指针变量所指向的结构体变量中的的sid这个成员(通常使用第二个)

   注意事项:

    结构体变量不能加减乘除,但可以相互赋值

    普通结构体变量和结构体指针变量作为函数传参的问题  

#include <stdio.h>
#include <string.h>

struct Student
{
    int sid;
    char name[200];
    int age;
}; //分号不能省

void f(struct Student * pst);
void g(struct Student st);
void g2(struct Student * );
int main()
{
    struct Student st; //已经为st分配好地址
    f(&st);
    g2(&st);
    //printf("%d %s %d
", st.sid, st.name, st.age);
    return 0;
}
//这种方式耗内存,耗时间,不推荐
void g(struct Student st)
{
   printf("%d %s %d
", st.sid, st.name, st.age);
}

void g2(struct Student *pst)
{
    printf("%d %s %d
", pst->sid, pst->name, pst->age);
}
void f(struct Student * pst)
{
    (*pst).sid = 99;
    strcpy(pst->name, "zhangsan");
    pst->age = 22;
}
#include <stdio.h>
#include <malloc.h>

struct Student
{
    int sid;
    int age;
};
struct Student * CreatStudent(void);
void ShowStudent(struct Student *);

int main()
{
    struct Student * ps;

    ps = CreatStudent();
    ShowStudent(ps);

    return 0;
}

void ShowStudent(struct Student * pst)
{
    printf("%d %d
",pst->sid,pst->age);
}
struct Student * CreatStudent(void)
{
    struct Student * p = (struct Student *)malloc(sizeof(struct Student ));
    p->sid = 88;
    p->age = 99;
    return p;
};

    

原文地址:https://www.cnblogs.com/spore/p/11070876.html