结构体怎么定义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体怎么定义相关的知识,希望对你有一定的参考价值。

1、结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。
2、在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
参考技术A 在实际问题中,一组数据往往具有不同的数据类型;例如在学生信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型。因为数据类型不同,显然不能用一个数组来存放。

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。定义结构体的一般形式为:
struct 结构体名
成员列表
;
每个成员都是结构体的组成部分,有名字,也有数据类型,形式为:
类型说明符 成员名;
例如用结构体来表示学生信息:
struct stu
char *name; //姓名
int num; //学号
char sex; //性别
float score; //成绩
;
结构体是一种构造数据类型(也称复杂数据类型),由若干不同类型的变量(数据)组成。每个变量都是结构体的成员(member),每个成员可以是基本数据类型,也可以是构造类型。相应的,int、char、float 这些数据类型被称为基本数据类型。上面的代码定义了一个结构体,名字为stu。stu由4个成员组成,分别为 name、num、sex、score。

注意大括号后面的分号;不能少。
结构体变量
结构体也是一种数据类型,可以用来说明变量。例如:struct stu stu1, stu2;定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 4 个成员组成。注意关键字struct不能少。

stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。

结构体的各个成员在内存中是连续存储的。stu1、stu2 的内存如下图所示:

你也可以在定义结构体的同时定义结构体变量:
struct stu
char *name; //姓名
int num; //学号
char sex; //性别
float score; //成绩
stu1, stu2;
将变量放在结构体定义的最后即可。

如果只需要 stu1、stu2 两个变量,也可以不写结构体名字:
struct //没有写 stu
char *name; //姓名
int num; //学号
char sex; //性别
float score; //成绩
stu1, stu2;
这样做书写简单,但是因为没有结构体名,后面就没法用该结构体定义新的变量。

也可以用宏定义使一个符号常量来表示一个结构类型,例如:
#define STU struct stu
STU
char *name; //姓名
int num; //学号
char sex; //性别
float score; //成绩
;
STU stu1, stu2;
后面我们会学习Windows编程,大部分结构体都是这样定义的。

成员的获取和赋值
在C语言中,使用点号.来获取结构体中的一个成员,一般格式为:
结构变量名.成员名
例如:
stu1.name; //第一个学生的姓名
stu2.score; //第二个学生的成绩
获取成员后,就可以对该成员进行赋值了,例如:
stu1.name = "Tom";
stu2.score = 90.5;
除了可以对成员进行逐一赋值,也可以像数组一样整体赋值,例如:
struct stu
char *name; //姓名
int num; //学号
char sex; //性别
float score; //成绩
stu1, stu2 = "Tom", 10, 'M', 90 ;
不过整体赋值仅限于上面这样的情况,也就是定义结构体的同时声明变量。下面的写法是错误的:stu2 = "Tom", 10, 'M', 90 ;
一个完整的示例:
#include <stdio.h>
#define STU struct stu
int main()
STU
char *name; //姓名
int num; //学号
char sex; //性别
float score; //成绩
;
STU stu1;
stu1.name = "James Bond";
stu1.num = 1;
stu1.sex = 'M'; //用M表示男性,W表示女性
stu1.score = 99;
printf("Hello everyone! My name is %s, a naughty boy, but with good scores(%.2f) and top No.(%d)!", stu1.name, stu1.score, stu1.num);

return 0;

运行结果:
Hello everyone! My name is James Bond, a naughty boy, but with good scores(99.00) and top No.(1)!
参考技术B 先声明数据结构
struct 结构名

结构的数据类型

;
接着就是定义结构了
struct 结构名 结构变量名称

例子:
struct stutent

int stu_num;

char stu_name[50];

;
struct stutent stu;

结构体写在头文件中怎么写,在其它函数文件中怎么引用

比如 我定义了一个头文件,里面是结构体
文件1.h
#include <stido.h> /*这句要写吗?*/
typedet struct student

int a;
int b;
struct student *next;
STU;
然后在另外一个程序中怎么使用这个文件
比如
function.c
#include <stdio.h>
#include "文件1.h"
STU *head,*p1;/*像这样使用好像不正确*/
.......... /*但是如何使用呢*/
但是STU 是struct student 的别名啊 看到typedef了吗 上面那个应该是 'f' 不是 't'
最下面的那个“冰冰” 那样好像不能引用啊 我在用的时候 出现了很多问题的

1、首先新建一个结构体作为参数项目,添加一个struct.c文件,如图所示。

2、包含stdio.h和stdlib.h头文件,如图所示。

3、输入main函数主体及返回值,如图所示。

4、定义一个结构体AAA,如图所示。

5、定义一个add函数,定义结构体,赋值,并且将结构体作为参数传递给add函数,如图所示。

6、最后运行程序,输出计算结果,如图所示就完成了。

参考技术A 既然函数在头文件中作了声明,一般是指全局函数,即其作用域是整个程序空间。若要在另一个头文件中引用该函数,可以通过以下两种方法实现:
(1)使用#include "函数声明所在的头文件名.h"
(2)使用关键字extern 函数声明; 指明这是引用的外部函数。
例如 :函数void windows_display(windows_t window);声明在头文件wins.h中,若要在output.h中引用,则可以:
(1)#include "wins.h"
(2)在output.h中添加该语句extern void windows_display(windows_t window);
参考技术B 你这样用是没有问题的
只不过你把typedef给打错了

首"文件1.h中
#include<stdio,h>可写可不写 如果在头文件中没写那么在 .c 文件中必须要写
文件1.h
#include<stdio.h>
typedef struct student

int a;
int b;
struct student *next;
STU;

function.c

#include"1.h"
STU *head,*p1;
void main()

........

这样就没有问题了本回答被提问者和网友采纳
参考技术C 1.#include <stido.h> /*这句要写吗?*/
不要写,在.cpp里写了就行了;结构体定义应该是放在类外定义。
2.然后在另外一个程序中怎么使用这个文件
在.CPP文件中要用到的地方进行声明:
STU stu;
stu.a = ...;
stu.b = ...;
参考技术D student *head,*p1
你应该用结构名来定义对象。
STU只是student结构的一个对象,不能用来定义

以上是关于结构体怎么定义的主要内容,如果未能解决你的问题,请参考以下文章

结构体中定义结构体怎么赋值

c++类里面定义结构体怎么做

matlab中怎么定义结构体

matlab中怎么定义结构体

C语言怎么给结构体里的结构体赋值?

matlab 怎么建立结构体数组?