C语言——结构体详解

目录

基础知识:

定义:

结构体的访问:

结构体传参:


基础知识:

由于描述一个事物并非单方面的一个数字或一组相同类型的值,而是多个方面多种类型。例如描述一个人通过年龄,性别,电话号码等相关信息。因此在C语言中有结构体这个变量。数组是多个相同类型的数据的集合,而结构体则是多个不同类型的数据的集合。

定义:

typedef struct Stu
{
    char name[20];//名字 
    int age;//年龄
    char sex[5];//性别 
    char id[20];//学号
}Stu;

在这里,如果没有typedef,那么我们调用结构体时需要写struct stu,而如果有typedef struct stu,那么我们只需要写stu就可以了。而最下面的Stu ,就相当于int a里面的a一样,是一个实际创建的变量,我们也可以在主函数中进行创建和初始化。

结构体也可以嵌套定义,在一个结构体中定义另一个结构体

struct Node {
    int data;
    struct Point p;
    struct Node* next;
}n1 = {10, {4,5}, NULL};

struct Node n2 = {20, {5, 6}, NULL};

结构体的访问:

当我们要访问的是结构体变量时,我们用 结构体名称.结构体内部成员 这个方式进行访问

当我们要访问的是结构体指针,我们既可以用(*结构体指针).结构体内部成员这种方式进行访问,另外一种比较简洁的方法是结构体指针->结构体成员

struct Stu 
{
    char name[20];
    int age; 
};

void print(struct Stu* ps)
{
    printf("name = %s age = %d\n", (*ps).name, (*ps).age);
    printf("name = %s age = %d\n", ps->name, ps->age);
}

int main() 
{
    struct Stu s = {"zhangsan", 20}; 
    print(&s);
    return 0;
}

结构体传参:


有两种方法可以对结构体进行传参,一种是直接给函数结构体变量,另外一种是给函数结构体的地址

struct S 
{
    int data[1000];
    int num; 
};

struct S s = {{1,2,3,4}, 1000}; 

void print1(struct S s)
{
    printf("%d\n", s.num);
}

void print2(struct S* ps) 
{
    printf("%d\n", ps->num);
}
int main() 
{
    print1(s);
    print2(&s);
    return 0;
}

那么这两种方法谁优谁劣呢,答案是使用传结构体地址的方法比较好,因为在传输过程中,由于函数开辟在栈上,如果结构体太大,那么会造成压栈,而如果传地址只会传4个字节,因此以后大家在使用过程中推荐使用第二种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值