【C语言】结构体

目录

一、结构体声明及定义

二、结构体的嵌套

三、访问结构体变量

四、结构体初始化

五、结构体数组

六、结构体指针

通过指针访问成员变量

七、作为函数参数及返回值


一、结构体声明及定义

        结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。在数组中只能存放同一类型的数据,而在结构中可以存放不同类型的数据。结构声明需要用到关键字struct

1、结构体声明

格式:

struct 结构体名称
{
      结构体成员1;
      结构体成员2;
           ……
};

形如:

struct Num
{
       int a;
       char str[10];
       float b;
};

2、结构体变量定义

只有定义了结构体变量该结构体才起作用,一个结构体可以定义多个结构体变量,表示这些结构体变量具有相同的结构体。结构体变量的定义有两种方式:

第一种:在声明结构体时直接定义,在结尾加入结构体变量即可;

例如:

struct Num
{
       int a;
       char str[10];
       float b;
}x,y;

以上就是定义了x、y两个结构体变量。

第二种:单独定义结构体变量;

例如:

struct Num
{
       int a;
       char str[10];
       float b;
};

struct Num x,y;

同样定义了x、y两个结构体变量。

二、结构体的嵌套

一个结构体的成员变量可以是另一个结构体变量;

例如:

struct Num1
{
       int a;
       struct Num x;
}table;

该结构体成员中包含了另一结构体变量x。

三、访问结构体变量

访问结构体变量我们要用到点号(.)运算符。

例如:

x.a;

就是访问结构体变量x的a成员。

嵌套结构体的访问:

table.x.a;

以上是访问结构体变量table的结构体变量成员x的变量成员a;如果还有嵌套,访问方式以此类推。

四、结构体初始化

全部成员初始化。

例如:

struct Num x =
{
       10;
       “abcd”;
       3.14;
};

struct Num x =
{
       .a=10;
       .str=“abcd”;
       .b=3.14;
};

指定成员初始化;

例如:

struct Num x =
{
       .a=10;
};

不能对字符型数组成员直接赋值,需要使用相关字符串操作函数将字符串写入,这类函数例如:

1、strcpy() 

2、sprintf()

3、memcpy()

……(待补充)

五、结构体数组

可以定义一个数组,数组里面存放的是结构体变量;

例如:

struct Num
{
       int a;
       char str[10];
       float b;
};

struct Num x[10];

访问某一变量的成员变量如下:

x[5].a;

上为访问第5号结构体变量元素的成员变量a。


六、结构体指针

定义及赋值:

struct 结构体名称 *指针变量

例如:

struct Num *pa;
pa=&x;

以上定义结构体指针pa指向结构体变量x,注意要加取地址符&。

通过指针访问成员变量

(1) (*结构体指针) . 成员名

(2) 结构体指针 -> 成员名

例如:

(*pa).a;
pa->a;

以上都是访问结构体变量x中的成员变量a。

七、作为函数参数及返回值

当使用结构体变量作为参数传给函数以及作为函数返回值时,函数的声明格式:

struct 结构体名称 函数名(struct 结构体名称 结构体变量)
{

}

例如:

#include <stdio.h>

struct Num
{
       int a;
       int b;
}x,y;

/*从键盘接收数据保存到对应结构体成员变量*/
/*返回结构体变量*/
struct Num GetInput(struct Num num) 
{
       scanf("%d %d",&num.a,&num.b);
       return num;
}

int main()
{
       x=GetInput(x);     
       y=x;

       printf("x.a=%d,x.b=%d\n",x.a,x.b);
       printf("y.a=%d,y.b=%d\n",y.a,y.b);
       return 0;
}

将结构体变量x传入函数GetInput()函数中,然后返回一个修改后的结构体变量再赋值给原先的结构体变量x,使得结构体变量x得以更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值