C语言机构体 详细解说(2)

前言:

这里我们接着上一章 更加详细的去学习探索C的特色“结构体”

1. 初始化、引用结构体变量

(1)结构体变量初始化

在c语言中,结构体变量初始化,本质是对结构体变量中的成员进行初始化,使用 花括号{} 在初始化列表中对结构体变量中各个成员进行初始化,例如:


struct Employee emp = {“rupeng”,20,1,10000}

或

struct Employee

{

    char name [8];

int age;

    int id;

    int salary;

} emp = {“rupeng”,20,1,10000};

编译器会将“rupeng”,20,1,10000按照顺序依次赋值给结构体变量emp中的成员:name

age、id、salary

(2)引用结构体变量

引用结构体变量的本质,是引用结构体变量中的不同类型的成员,引用的一般形式为:结构体变量名、成员名。

例如:emp.name表示引用emp变量中的name成员,emp.id表示引用emp 变量中的id成员。

其中“.”是成员运算符,它的优先级在所有运算符中最高的。

例:


include <stdio.h>



struct Employee

{

    char name[20];

    int age;

    int height;

    int salary;    

};      //这里的‘;’必须要加上



int main ()

{

    struct Employee e1={“yzk”,18,1,80000};

    printf(“姓名%s,年龄%d,工资%d”,e1.name,e1.age,e1.salary);

    getchar ();

    return 0;

}

还可以挨个赋值:

不过要再加上头文件 include <string.h>,因为字符串无法直接赋值

int main()

{

    struct Employee e1;

    strcpy(e1.name,”yzk”);       //将字符串变量,打印到某个变量中

    e1.age = 18;

    e1.height = 1;

    e1.salary = 80000;

}

2. 机构体指针

指向和结构图的指针 就是 机构体指针,如果指针变量中保存一个机构体变量的地址,则这个指针变量指向该结构体变量,需要注意的是指针变量的类型必须和结构体变量的类型相同。    

定义结构体指针变量的一般形式为:

struct Employee;

struct Employee *p_emp = &emp;

其中emp为结构体变量,p_emp为结构体指针,将emp取地址赋给指针变量p_emp,表示p_emp指向emp。

在c语言中,通过结构体指针p也可以语言结构体的成员,有以下两种方式:

(1)(*p).成员名

(2)p -> 成员名

例如:struct Employee *p_emp = &emp;

(*p_emp)表示指向的结构体变量emp,(*p_emp).age表示指向的结构体变量emp中的成员age。注意:“.”运算符优先级是最高的,(*p_emp)两侧的括号不能省去。

为了简化操作,c语言允许将 (*p).成员名 p->成员名 替换,(*p_emp).age等价于*p_emp->age“->”称为 指向运算符

例:

include <stdio.h>



struct Employee

{

    char name[20];

    int age;

    int height;

    int salary;    

};



int main ()

{

    struct Employee e1={“yzk”,18,1,80000};

    struct Employee *p_e1 = &e1;

    printf(“姓名%s,年龄%d,工资%d”,e1.name,e1.age,e1.salary);

    printf(“%s,%d\n”,(* p_e1).name, (* p_e1).age);  //指针指向打印

    printf(“%s,%d\n”, p_e1->name, p_e1->age);  //指针指向打印

    getchar ();

    return 0;

}

3. typedef类型别名

在c语言中,除了使用c语言通过的标准类型名:char、int、double……以及自定义的结构体类型。还可以使用typedef关键字指定一个新的类型名来代替已有的类型名,相当于给已有类型起别名。

类似于现实生活中,给一个人起外号,其实都是一个人。

typedef 的一般使用形式为:

typedef 原类型名 新类型名

例如:

typedef int integer;

其中 integer 是 int 类型的别名,在程序中可以使用 integer 代替 int 来定义整型变量。

例:

integer a,b; 等价于 int a,b;

typedef struct Employee t_Employee;

其中 struct Employee 为自定义结构体类型名,t_Employee 为 struct Employee 的别名,在程序在可以使用t_Employee 替代 struct Employee。

例:

include <stdio.h>

typedef struct Employee t_Employee;



t_Employee

{

    char name[20];

    int age;

    int height;

    int salary;    

};



int main ()

{

    t_Employee e1={“yzk”,18,1,80000};

    t_Employee *p_e1 = &e1;

    printf(“姓名%s,年龄%d,工资%d”,e1.name,e1.age,e1.salary);

    printf(“%s,%d\n”,(* p_e1).name, (* p_e1).age);  //指针指向打印

    printf(“%s,%d\n”, p_e1->name, p_e1->age);  //指针指向打印

    getchar ();

    return 0;

}

4. 结构体复制

在c语言中,允许 相同类型的结构体变量 之间 相互赋值。

例如:

t_Employee emp = {“rupeng”,20,1,10000};

t_Employee emp2 = emp;

执行 emp2 = emp,会将结构体变量emp各个成员的值原样复制一份到变量emp2各个成员中。和基本类型变量的赋值规则相同,emp2 是 emp 的一个拷贝。这种赋值方式,被称为“结构体复制”。

例:


include <stdio.h>

typedef struct Employee t_Employee;



t_Employee

{

    char name[20];

    int age;

    int height;

    int salary;    

};



int main ()

{

    t_Employee e1 = {“yzk”,18,1,80000};

    t_Employee e2 = e1;     //把 e1当前的值拷贝一份,赋值给 e2

    printf(“姓名%s,年龄%d,工资%d”,e1.name,e1.age,e1.salary);

    printf(“姓名%s,年龄%d,工资%d”,e2.name,e2.age,e2.salary);

    getchar ();

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值