c语言必备基础知识(5)

目录

结构体

1.特点

2.声明与定义

3.特殊的结构提成员变量

4.结构体成员变量初始化和访问

5.结构体赋值

6.结构体指针

7.结构体与函数,结构体嵌套结构体

联合体(共同体)

1.c语言联合

2.声明和定义联合

3.访问联合成员变量


结构体

1.特点

        (1)结构是C语言一种派生类型,允许多种数据类型的变量组合起来,自定义成新的类型,这些不同类型的变量称为结构成员变量,变量名称称为结构成员标识符。
         
注:数组是将多个相同类型的变量组合起来,多个变量没有标识符,只能通过下标访
问。

结构特点:

·结构允许多个不同类型变量声明和定义
·结构也可以没有成员变量,空结构
·结构成员变量不能是函数类型、结构体本身和void等不完整类型
·结构成员变量可以包含指向自身的指针,也可以
包含其他类型结构体
·结构类型同样需要先声明、定义,再使用

2.声明与定义

         (1)结构类型既可以单独声明和定义,也可以一并声明和定义,可以使用typedef自定义结构类型名称。

             结构声明的基本语法:

struct 结构类型名 {
成员变量类型1 变量名称1;
成员变量类型2 变量名称2;
...
}结构类型变量名;

注:结构类型名和结构类型变量名可以相同,也可以不同。

例如:以下四种方式是等价的:

// 声明同时定义结构类型 struct student
{
char name[10];
int age;
char sex[4];
};
// 声明和定义结构变量stu1,stu2 
struct student stu1,stu2;
// 先声明
struct student;
// 后定义
struct student{
char name[10];
int age;
char sex[4];};
//声明和定义结构变量
struct student stu1,stu2;
typedef struct student
{
char name[10];
int age;
char sex[4];
}STUDENT;
STUDENT stu1,stu2;

注:STUDENT是typedef自定义的新的类型名称,等价于structstudent结构类型
名。

// 同时声明定义结构类型和结构变量
// 省略结构类型名称,此时该匿名结构类型只能 struct
{
char name[10];
int age;
char sex[4];
} stu1,stu2

3.特殊的结构提成员变量

       (1)指向自身的指针变量

结构类型可以包含指向指向自己的指针变量,不能包含自身。

注:这种特性可以用来建立链表、树型等复杂数据结构。

例如:

// 以下正确,指向自身的指针
 struct student {
      ...
       struct student *s;

};

// 以下不正确,指向自身 
struct student {
      ... 
       struct student s;
};

          (2)指向其他结构体的成员变量

例如:

struct studentType1 {

     ...
};

struct studentType2{
      ...
     struct studentType1 ss;

}stu1,stu2;

4.结构体成员变量初始化和访问

         成员变量通过点运算符 .访问。

例如:初始化一条学生记录,初始化并且打印出来。



#include <stdio.h>
struct student
{
  // 姓名
  char name[10];
  // 年龄 
  int age;
  // 性别
  char sex[4];
  // 昵称
  char *nickname;};
  int main(void){
  // 定义变量时直接初始化
  struct student stu1 = {
  "云中君",
  20,
  "男",
  "风一般的男子"
};
  printf("%s\n",stu1.name);
  printf("%d\n",stu1.age); 
  printf("%s\n",stu1.sex);
  printf("%s\n",stu1.nickname);

return o;

}

输出结果:

云中君

20


风一般的男子

5.结构体赋值

6.结构体指针

        结构指针,是指向结构体变量的指针,结构指针使用通过->间接访问结构体成员变量。

例如:初始化一条记录,使用结构指针间接访问成员变量

#include <stdio.h>

struct student
{
// 姓名
char name[10];

// 年龄

int age;

// 性别
char sex[4];

// 昵称
char *nickname;

};
int main(void)
// 定义变量时直接初始化
struct student stu1 = {
"马超",

20,

"男",
"我喜欢的英雄"

};

// 定义结构体指针变量,并且初始化

struct student *sp = &stu1;

printf("%s\n",sp->name);

printf("%d\n",sp->age);

printf("%s\n",sp->sex);
printf("%s\n",sp->nickname);
return 0;

}

输出结果:

马超

20

我喜欢的英雄

7.结构体与函数,结构体嵌套结构体

       (1) 结构体可以直接作为函数参数和返回值,结构体和普通变量一样,通过值传递传给函数参数,也可以作为整体返回值。

        (2) 结构体指针也可以作为参数传递给函数,同样也可以作为函数返回值类型

联合体(共同体)
          C语言联合

      (1)联合,也称为联合体或共用体,语法和结构一样。与结构相比,结构体是有n个成员变量,就分配n个成员的存储空间,各个成员变量独立:联合是有n个成员变量,只分配1个成员变量(最大的成员变量)存储空间,各个成员变量共享相同的内存空间。

       (2)特点:

·可以声明多个不同类型成员变量
·多个成员变量共享相同存储空间,修改任一变量
影响其它变量的值

         声明和定义联合

union 联合类型名称{
变量成员类型1 变量名1;

变量成员类型2 变量名2;
...

}联合类型变量名

例如:

// 仅声明联合类型

test union test;

// 声明和定义联合类型

test union test

{
int i;

float f;

};

// 声明定义联合类型,并且声明两个联合变量

union test

{
int i;

float f;

}test1,test2;
 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值