C语言 —— 结构体初阶

结构体初阶

一类数据的集合。

结构体的创建和销毁

struct Stu
{
    //成员变量
    char name[20];//名字                   类型
    int age;//年龄
    char id[20];
};//要有分号
int main()
{
    struct Stu s;//对象 
    return 0;                           //对象
}
struct B
{
    char c;
    short s;
    double d;
}n1 = {'w',20,3.14};//结构体嵌套初始化

struct B n2={'w',3,23.44};//结构体嵌套初始化

struct Stu
{
    struct B sb;
    char name[20];//名字
    int age;//年龄
    char id[20];
}s1,s2;//s1和s2也是结构体变量
//s1,s2是全局变量

int main()
{
    struct Stu s = {{'w',20,3.14},"张三",30,"20220329"};//对象
    
    return 0;
}
//取结构体地址
int main()
{
    struct Stu* ps = &s;
    printf("%c\n",(*ps).sb.c);
    printf("%c\n",ps->sb.c);
    return 0;
}
结构体传递参数
void print1(struct Stu t)
{
    printf("%c %d %lf %S %d %s\n",t.sb.c,t.sb.s,t.sb.d,t.name,t.age,t.id);
}
void print2(struct Stu* ps)
{
    printf("%c %d %lf %S %d %s\n",ps->sb.c,ps->sb.s,ps->sb.d,ps->name,ps->age,ps->id);
}

int main()
{
    struct Stu s = {{'w',20,3.14},"张三",30,"20220329"};//对象
    
    //写一个函数打印s的内容。
    print1(s);//传值传参。
    print2(&s);//传址传参
    
    return 0;
}

使用传址传参。为防止压栈操作。

int main()
{
    int a =10;
    int b = 23;
    int c = 0;
    int c =Add(a,b);//大部分情况下,先传递b,再传递a。
    
    return 0;
}

压栈是函数的形参也创建一块空间,虽然是临时创建的,在栈区上的,但若也会造成栈区的内存空间浪费。
函数的参数传递,一般先传,右边的参数。


C语言 —— 结构体初阶_第1张图片


  • 下一个板块
struct student
{
    int num;
    char name[32];
    float score;
}stu;
//struct是结构体类型的关键字
//struct student是用户定义的结构体类型
//num ,score是结构体成员名。
//stu是用户定义的结构体变量名。
//还可以使用typedef重新定义名字。
struct stu
{
    int num;
    char name[10];
    int age;
};
void fun(struct stu* str)//这里传递的是结构体指针。
{
    printf("%s\n",(*str).name);
    return;
}
int main()
{
    struct stu students[3] ={
        {9800,"dsfa",20},
        {4844,"dfsd",50},
        {4611,"rrgd",52}
    };
    fun(students + 1);//指向第二个元素
    return 0;
}
  • 结构体中的优先级
struct S
{
    int a;
    int b;
};
int main()
{
    struct S a, * p = &a;
    a.a = 99;
    printf("%d\n",a.a);
    //*p.a 不行,优先级问题
    //(*p).a  可以
    return 0;
}

你可能感兴趣的:(c语言)