C语言结构体Struct怎么使用?

作者&投稿:永炉 (若有异议请与网页底部的电邮联系)
C语言结构体的用法,~

结构体的使用,首先要定义:
#includestruct student{ char name[10]; int num; int age;};//注意要分号//然后就可以使用了:void main(){ struct student s; struct student *p=&s;//指针指向,可以不用指针 printf("input name:"); gets(s.name);//若使用指针,则:gets(p->name); printf("input num:"); scanf("%d",&s.num);//指针的写法:scanf("%d",&p->num); printf("input age:"); scanf("%d",&s.age); //输出结果: printf("namenumage
"); printf("%s%d%d
"); }结构体类似于数组,但结构体能定义不同的数据类型,这也是它的特别之处

代码仅供参考:

#include "stdio.h"
#include "conio.h"
struct books
{
char *name;
char *press;
char *author;
float price;
};
struct books lib[]={{"C language","UESTC","Zhuang San",12.50},{"PASCAL","UESTC","Li Si",10.00},{"English Reading","UESTC","Wang wu",8.00},{"########","#####","######",0}};//由于篇幅有限,这里只给出三本书的信息
main()
{
find();
printf("Press any key continue...
");
getch();
}
//图书查询子函数
find()
{
struct books *p;
char sm[100];
int i=0;
p=&lib[i];
printf("Please input the name of books:
");
gets(sm);
printf("The information of the books:
");
while(p->price!=0)//用p->price成员的值控制循环
{
if(strcmp(p->name,sm)==0)
{
printf("%18s%8s%8s%7.2f
",p->name,p->author,p->press,p->price);
break;//当字符比较函数值为0,表明该书已找到,打印并跳出循环
}
i++;//否则将下标加1移向下一元素
p=&lib[i];//让指针再指向这一元素后继续查找
}
if(p->price==0)//p->price=0,表明整个书库都已查完并没有找到所要的书
printf("Sorry ! Your inquires the book was not found.
");
}

在Turbo C中,结构也是一种数据类型, 可以使用结构变量,因此,像其它类型的变量一样,在使用结构变量时要先对其定义。

如果需要定义多个具有相同形式的结构变量时用这种方法比较方便,它先作结构说明,再用结构名来定义变量。

扩展资料

指向结构体的指针是一个一直都没有掌握好的点,希望这里能记录好一点,加强理解。 
对于指针有几个好处,

第一:就像指向数组的指针比数组本身更容易操作一样,指向结构的指针通常也更容易操作; 

第二:在早期的C中参数传递只能使用结构的指针;

第三:很多奇妙的数据表示都是用了包含指向其他结构的指针的结构。 
和数组不同,结构的名字不是该结构的地址(即单独的结构名并不是该结构地址的同义词),必须使用 & 运算符。

参考资料c语言结构体struct相关使用说明



在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

struct 结构体名{

结构体所包含的变量或数组

};

结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。

结构体定义:

第一种:只有结构体定义

struct stuff{

char job[20];

int age;

float height;

};

第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义

//直接带变量名Huqinwei

struct stuff{

char job[20];

int age;

float height;

}Huqinwei;

也许初期看不习惯容易困惑,其实这就相当于:

struct stuff{

char job[20];

int age;

float height;

};

struct stuff Huqinwei;

第三种:如果该结构体只用一个变量Huqinwei,而不再需要用struct stuff yourname;去定义第二个变量。

那么,附加变量初始化的结构体定义还可进一步简化出第三种:

struct{

char job[20];

int age;

float height;

}Huqinwei;

把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。

结构体变量及其内部成员变量的定义及访问。

要分清结构体变量和结构体内部成员变量的概念。

就像刚才的第二种提到的,结构体变量的声明可以用:

struct stuff yourname;

其成员变量的定义可以随声明进行: struct stuff Huqinwei = {"manager",30,185};

也可以考虑结构体之间的赋值:

struct stuff faker = Huqinwei;

//或 struct stuff faker2;

// faker2 = faker;

打印,可见结构体的每一个成员变量一模一样

如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)

Huqinwei.job[0] = 'M';

Huqinwei.job[1] = 'a';

Huqinwei.age = 27;

Huqinwei.height = 185;

结构体成员变量的访问除了可以借助符号".",还可以用"->"访问。

扩展资料:

结构体数组与结构体指针:

一个结构体变量中可以存放一组数据;如一个学生的学号、姓名、成绩等数据。如果有10个学生的数据需要参加运算显然应该用数组,这就是结构体数组结构体数组与以前介绍过的数值型数组不同之处:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员(分量)项。

结构体指针和其他类型的指针都是一样的理解,在32位平台不管啥类型的指针都占4个字节的空间。

结构体指针就是指向结构体变量的指针;如果一个指针变量中保存了结构体变量的首地址,那么这个指针变量就指向该结构体变量.通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的结构指针变量说明的一般形式为:

struct 结构体名 *结构体指针变量名struct student *p = &Boy; //假设事先定义了 struct student Boy。

参考资料来源:百度百科-struct






结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。 结构中可以使用不同的数据类型。 

结构说明和结构变量定义: 

在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此,  象其它 类型的变量一样, 在使用结构变量时要先对其定义。 

定义结构变量的一般格式为:

struct 结构名

{

类型  变量名;

类型  变量名;

...

} 结构变量; 

结构名是结构的标识符不是变量名。 类型为第二节中所讲述的五种数据类型(整型、浮点型、字符型、指针型和 无值型)。 构成结构的每一个类型变量称为结构成员, 它象数组的元素一样, 但数组中元素是以下标来访问的, 而结构是按变量名字来访问成员的。



Balance、Number、Value是结构体数据存储的部分。struct tagS_AVLNode* Left和struct tagS_AVLNode* Right不是定义的结构体,而是指向这种结构体的指针(从*可以看出)。这种情况一般是用在双向链表里面的左右指针(或者二叉树)。在链表中,这样一个结构体就叫一个结点,Left指针指向他的前一个结点,而Right指针指向他的后一个结点(需要在程序中自己写语句说明指针指向)。另外结构体里面可以包含其他结构体,但是通常是不能再包含该结构体自己。希望对你有帮助,如有疑问请联系我。谢谢。
结构体里面包含另外一个结构体举例:
typedef struct tagS_AVLNode
{
struct student
{
char name[20];
int number;
float score;
}stu1;
TSHORT Balance;
TSHORT Number; /* 外部可用来存储16位值 */
TUINT Value; /* 外部可用来存储32位值 */
} S_AVLNode;

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

struct 结构体名{

结构体所包含的变量或数组

};

结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。

结构体定义:

第一种:只有结构体定义

struct stuff{

char job[20];

int age;

float height;

};

第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义

//直接带变量名Huqinwei

struct stuff{

char job[20];

int age;

float height;

}Huqinwei;

也许初期看不习惯容易困惑,其实这就相当于:

struct stuff{

char job[20];

int age;

float height;

};

struct stuff Huqinwei;

第三种:如果该结构体只用一个变量Huqinwei,而不再需要用struct stuff yourname;去定义第二个变量。

那么,附加变量初始化的结构体定义还可进一步简化出第三种:

struct{

char job[20];

int age;

float height;

}Huqinwei;

把结构体名称去掉,这样更简洁,不过也不能定义其他同结构体变量了——至少我现在没掌握这种方法。

结构体变量及其内部成员变量的定义及访问。

要分清结构体变量和结构体内部成员变量的概念。

就像刚才的第二种提到的,结构体变量的声明可以用:

struct stuff yourname;

其成员变量的定义可以随声明进行: struct stuff Huqinwei = {"manager",30,185};

也可以考虑结构体之间的赋值:

struct stuff faker = Huqinwei;

//或 struct stuff faker2;

// faker2 = faker;

打印,可见结构体的每一个成员变量一模一样

如果不使用上边两种方法,那么成员数组的操作会稍微麻烦(用for循环可能好点)

Huqinwei.job[0] = 'M';

Huqinwei.


结构体struct {int num; int age;char sex;}占多少个字节?
对于结构体struct { int num; int age; char sex; }来说,int num 占用4个字节,int age占用4个字节 char sex是一个字节长度,但是需要符合内存对齐原则,因此在内存分配的时候,也是占用4个字节的长度,因此整个结构体占用的内存大小为12个字节 ...

非常简单C语言,关于结构体定义
struct mystru { int x;int y;} stru1;在1中,定义结构体类型的同时,定义结构体类型变量,在这里stru1是一个结构体变量,可以直接对其操作.如: stru1.x = 1;stru1.y = 2;② typedef struct { int x;int y;} stru1;在2中,只是定义了结构体的类型,typedef是对结构体类型取了一个别...

C结构体指针问题
stru[i],是取一维数组的第i元素,所以当然是一个STU变量了。

c语言设有以下说明语句:
struct结构名 { 成员表列 };成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。在这个结构定义中,结构名为strutype,该结构由2个成员组成。第一个成员为a,整型变量;第二个成员为b,浮点型...

如何给结构体数组赋值
typedef struct { int a;int b;} Stru;\/\/定义时赋值 Stru A[10]={ {1,2}, {3,4}, {5,6}, {7,8}, {9,10},{10,11} {12,13}, {14,15}, {15,16}, {17,18} } \/\/程序动态赋值 Stru A[10];for(i=0;i<10;i++){ A[i].a=i+1;a[i].b=(i+1)...

结构体变量各个成员的表示方法 (*结构体指针变量).成员名 结构体指针...
如果已经定义了结构体,取名test,并且假设定义了结构体指针,取名*ptr typedef struct { int a;}STR; \/\/定义结构体 STR test; \/\/ 定义结构体变量 STR *ptr;\/\/定义结构体指针 ptr=&test;\/\/ 指针指向结构体变量 那么引用结构体里的成员a时 test.a (*ptr).a ptr->a 这三者是等价的 ...

C语言定义结构体并赋值后,怎样把整个结构体传递给子函数?
使用堆内存,然后传递一个指向这个结构体的指针就可以了,或者直接向子函数传递结构体变量.比如:include <stdio.h>#include <malloc.h>typedef struct STRC_def{int i;int j;}STRC;int Func1(STRC * pSTRC);int Func2(STRC aSTRC);int main(){STRC * a =(STRC *)malloc(sizeof(STRC)...

c++怎么清空结构体数组里的数据
你想清空?那就是全部置0哦,比如 stru_data是一个结构体,可以这样:memset(&stru_data, 0, sizeof(stru_data)); Ps:stru_data是一个对象,如果是指针指向的话,上面就不用&,后面就是sizeof(\/*里面是结构体的名字*\/)

求助!C语言数组和结构的问题!
已知一结构体类型T,其中有成员变量A,现在已知一个类型T的实现t中成员A的地址为pA,请编写宏定义得到实例t的首地址。答案:include <stdio.h> define STRUCT_OFFSET(stru_name, element) (unsigned long)&((struct stru_name*)0)->element struct stru_addr { int a;char b;int d;char c;}...

c语言里一个关于子菜单结构体存储的问题
给个例子你看一下就懂了#include<stdio.h>struct{int a;char b;}t[2]={{12,'w'},{13,'E'}};void main(){FILE *fp;int i;fp=fopen("stru.txt","a+"); \/\/追加方式打开for(i=0;i<2;i++)fprintf(fp,"%d %c\\n",t[i].a,t[i].b); \/\/写进文件\/\/想读取文件的话用...

平桥区13776037113: c语言中struct 的用法!谁知道!讲讲!谢谢! -
善紫黄藤: 结构类型定义和结构变量说明 在实际问题中,一组数据往往具有不同的数据类型.例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;成绩可为整型或实型. 显然不能用一个数组来存放这一...

平桥区13776037113: 请教C语言中struct的用法 -
善紫黄藤: 先申明结构体,也就是定义结构体具体形式,而后可以把它当做普通数据类型来修饰变量,也可以在定义类型时后面直接跟着定义几个变量 通过变量名和点操作符来访问结构体中各个成员,如果是指针,则用->符号来访问结构体中的成员 例如...

平桥区13776037113: c语言中struct的应用 -
善紫黄藤: 在c中,struct是关键字--结构体的标识符,而node是用户自己定义的结构体名称,方便自己使用,而struct node name;便是定义一个node类型的结构体

平桥区13776037113: C语言struct语句的使用 -
善紫黄藤: struct结构应该改下:struct stu{ int number; char name[20];/*数组,您不会是用一个字符表示名字? */ float sorce; }str[20]; for(i=0;i<20;i++){ printf("put number:"); scanf("%d",&str[i].number); printf("put name and sorce :"); scanf("%s",&str...

平桥区13776037113: c语言中struct当作函数使用 -
善紫黄藤: aaa是一个拥有struct stu*返回值的函数,你调用的是函数,不是结构体,

平桥区13776037113: C语言中定义一个结构体如何在不同的.C文件中使用. -
善紫黄藤: 比如三个.c文件一个.h文件 1. c 2.c 3.c 4.h 这三个头文件都引用4.h include<4.h>4.h中定义一个结构体类型struct test{}; 1.c中定义一个该结构体类型的全局变量struct test mode;4.h中extern struct test mode;其他.c文件就可以直接使用这个结构体变量了,并且是共用的

平桥区13776037113: C语言 结构体 怎么定义 使用 举个例子 看看 -
善紫黄藤: struct a { int m; char f[20];....} 这就是结构体,定义一般放在头文件的开头!

平桥区13776037113: C语言结构体如何使用?如题,我百度失败了请大神口述
善紫黄藤: 你好:C语言中的结构体,听名字有点吓人,其实不难.下面我给你详细说明:首先,结构体,是自定义的数据类型,就如int 、 char 、float 这些类型是编译器自定义的类...

平桥区13776037113: C语言结构体中struct和typedef struct有什么区别? -
善紫黄藤: C语言结构体中struct和typedef struct区别为:声明不同、访问不同、重新定义不同. 一、声明不同 1、struct:struct可以直接使用结构体名字声明结构体. 2、typedef struct:typedef struct的为.修饰结构体,结构体有了别名,通过结构体别名声明...

平桥区13776037113: C语言中,struct用什么来定义? -
善紫黄藤: struct是一种类型(结构体类型)与int、float一样的,它是为了解决C语言类型单调而设计的.在它里面可以出现int、string类型等C语言类型.使用它不需要定义,常常用它定义结构体.如定义一学生结构体: struct students {int age;int Number;char name[20]; } 还可以通过结构体建立C语言的灵魂——链表 如:struct student {int data; struct student *next; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网