C语言基础-结构体初阶(九)

结构体的初阶

结构体的声明

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量;

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

int main()
{
    //s是局部变量
    struct Stu s;//对象
    
    return 0;
}

类型—>对象

结构体变量的定义和初始化

int main()
{
    //s是局部变量
    struct Stu s = {{'w',20,3.14},"张三",30,2022};//对象
    
    return 0;
}

结构体的访问

int main()
{
    //s是局部变量
    struct Stu s = {{'w',20,3.14},"张三",30,2022};//对象
    
    //. ->
    //printf("%c\n",s.sb.c);
    //printf("%s\n",s.id);
    
    return 0;
}

image-20220318132520423

struct Stu* ps = &s;
printf("%c\n",(*ps).sb.c);
pritnf("%c\n",ps->sb.c);

image-20220318132859747

结构体传参

写一个函数打印s的内容

struct B
{
    char c;
    short s;
    double d;
};
struct Stu
{
    //成员变量
    struct B sb;
    char name[20];//名字
    int age;//年龄
    char id[20];
};
void print1(struct Stu t)
{
    printf("%c %d %IF %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 %If %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,2022};
    
    print1(s);//(1)
    print2(&s);//(2)
    
    
    return 0;
}

C语言基础-结构体初阶(九)_第1张图片

传值调用(1)和传址调用(2)

首选(2),函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

函数调用的参数压栈:

栈,是一种数据结构,先进的后出,后进的先出

C语言基础-结构体初阶(九)_第2张图片

函数传参的讲解:

int Add(int x,int y)
{
    int z = 0;
    z = x +y;
    return z;
}
int main
{
    int a - 3;
    int b = 5;
    int c = 0;
    c = Add(a,b);
    
    return 0;
}

C语言基础-结构体初阶(九)_第3张图片

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