目录
一、结构体声明及定义
结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。在数组中只能存放同一类型的数据,而在结构中可以存放不同类型的数据。结构声明需要用到关键字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得以更新。