结构体类型的定义

作者&投稿:揣胃 (若有异议请与网页底部的电邮联系)
c语言中关于结构体类型的定义~

struct在C语言中是一个关键字,用于定义结构数据类型。

  问题中的两种定义的区别在于第一种是给student数据类型,重新定义了一个类型别名,而第二种则单纯的表示一种叫做student的数据结构类型。两者的主要区别在于后面直接定义变量时。如下代码,则可以直接在结构体后面定义一个zhang_san的结构体变量。
struct student
{
int num;
struct student *next;
}zhang_san;
  而第一种的定义,则会出现错误。
typedef struct student
{
int num;
struct student *next;
}student zhang_san;
  
扩展:
  “结构”是一种构造数据类型,现在一般叫做用户自定义数据类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。

  定义一个结构的一般形式为:
struct结构名
{
//成员表列
};

  成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
};

  在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。

关键字 struct 就代表是一个结构体类型。
PER就是就是这个结构体类型的名称。
PER per ; per就是定义好的结构体变量。
12345678910111213141516171819202122typedef struct PER{ int n; char ch[8];}PER;一般这样定义结构体类型 定义变量的时候可以 struct PER per; 或者 直接 PER per; 而用你写的定义方法只能用 PER per 定义变量 如果这样写struct PER{ int n; char ch[8];}; 只能用 struct PER per 的方式定义变量。

扩展资料:
#include
struct pn544_dev{ //一般性定义结构体
char a;
};
typedef struct { //定义一个数据类型
char a;
}pn545_dev;
int main()
{ struct pn544_dev *dev_id;
//struct pn544_dev *pn544_dev = dev_id; //这个可以
struct pn544_dev pn544_dev; //这个也是可以,可见不是数据类型的愿因
pn544_dev.a='a';
putchar(pn544_dev.a);
pn545_dev pn545_dev; //这个也可以,即使用typedef声明了数据类型,也可以同名。
pn545_dev.a= 'b'
putchar(pn545_dev.a);
return 0;}
参考资料来源:百度百科 ——结构体类型

前面只是指定了一种结构体类型,它相当于一个模型,但其中并无具体数据,系统也不为之分配实际的内存单元为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。 (1) 先声明结构体类型再定义变量名如上面已定义了一个结构体类型Student,可以用它来定义结构体变量。如
struct Student student1, student2;
以上定义了student1和student2为结构体类型struct Student的变量,即它们具有struct Student类型的结构。在定义了结构体变量后,系统会为之分配内存单元。例如student1和student2在内存中各占63个字节
(4+20+1+4+4+30=63)。
但是这里需要注意:名义上计算大小为63,根据不同编译器,内存存储会有所不同,在存储该结构体时会按照内存对齐进行相关处理,系统默认对齐系数为4(即按int类型对齐,粗略认识可以认为每相邻两个数据成员存储是大小是4的整数倍,请参考下面对比结构体),详情请参考内存对齐,因此该结构体实际大小为:68,具体计算如下:
{
int num;//整型,4个字节
char name[20];//字符数组20个字节,4的整数倍,取20字节
char sex;//字符类型,一个字节,往下不能凑齐4个字节,因此取4个字节
int age;//以下同理 4个字节
float score;//4个字节
char addr[30];//字符数组30个字节,取4整数倍,因此为32
}
故实际大小为:4+20+4+4+4+32=68
对比结构体:1
{
int num;//整型,4个字节
char name[19];//字符数组19个字节,往下能取4的整数倍,取20字节
char sex;//存放在上面字符数组char name[19]后面,凑成20字节,为了表示存在这个数据,在这里给个0
int age;//以下同理 4个字节
float score;//4个字节
char addr[30];//字符数组30个字节,取4整数倍,因此为32
}
故实际大小为:4+20+0+4+4+32=64
对比结构体:2{
int num;//整型,4个字节
char name[20];//字符数组19个字节,往下能取4的整数倍,取20字节
char sex;//字符类型,一个字节,往下能凑上一个字符数据字节,单任不能凑齐4个字节,因此取4个字节
char test;//新增加的数据类型,已往上存放,为了表示存在这个数据,这里给个0
int age;//以下同理 4个字节
float score;//4个字节
char addr[30];//字符数组30个字节,取4整数倍,因此为32
}
故实际大小为:4+20+4+0+4+4+32=68
(2) 在声明类型的同时定义变量
例如:
struct Student//声明结构体类型Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1,student2;//定义两个结构体类型Student的变量student1,student2
这种形式的定义的一般形式为
struct 结构体名
{
成员表列
}变量名表列;
(3) 直接定义结构体类型变量
其一般形式为
struct//注意没有结构体类型名
{
成员表列
} 变量名表列;
这种方法虽然合法,但很少使用。提倡先定义类型后定义变量的第(1)种方法。
在程序比较简单,结构体类型只在本文件中使用的情况下,也可以用第(2)种方法。
关于结构体类型,有几点要说明:
(1) 不要误认为凡是结构体类型都有相同的结构。实际上,每一种结构体类型都有自己的结构,可以定义出许多种具体的结构体类型。
(2) 类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。在编译时,是不会为类型分配空间的,只为变量分配空间。
(3) 对结构体中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。
(4) 成员也可以是一个结构体变量。

struct Date //声明一个结构体类型Date
{
int month;
int day;
int year;
};
struct Student
//声明一个结构体类型Student
{
int num;
char name[20];
char sex;
int age;
Date birthday;
char addr[30];
}student1,student2;
//定义student1和student2为结构体类型Student的变量Student的结构。
(5) 结构体中的成员名可以与程序中的变量名相同,但二者没有关系。
例如,程序中可以另定义一个整型变量num,它与student中的num是两回事,互不影响。 和其他类型变量一样,对结构体变量可以在定义时指定初始值。如
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1={10001,Zhang Xin,'M',19,90.5,Shanghai};
这样,变量student1中的数据如图7.2中所示。也可以采取声明类型与定义变量分开的形式,在定义变量时进行初始化:
student2= student1;




结构体的定义和用法是什么意思?
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。定义与声明 结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。在实际应用...

结构体类型的定义
(1) 先声明结构体类型再定义变量名如上面已定义了一个结构体类型Student,可以用它来定义结构体变量。如struct Student student1, student2;以上定义了student1和student2为结构体类型struct Student的变量,即它们具有struct Student类型的结构。在定义了结构体变量后,系统会为之分配内存单元。例如stude...

结构体定义 typedef struct Lnode{ int data; struct Lnode *next; }...
这句话其实有两层意思,先是结构体的定义,源代码:struct Lnode{ int data; struct Lnode *next; } 解释:结构体类型定义的一般形式为:struct 结构名 {结构成员表};其次是给结构体声明了另外一个名字,typedef声明,简称typedef,为现有类型创建一个新的名字,或称为类型别名, 在结构体定义,...

c语言的结构类型的意思
struct book \/* 定义结构体类型 *\/ { char bookname[20];float price;char publisher[20];char author[10];} ;struct book mybook = { “maths”, 24.7, “ 电子社 ”, “zhao” }, storybook;则, mybook 变量的 price = 24.7 。2. 定义结构类型的同时定义结构变量。struct bo...

C语言中typedef struct什么意思
类型定义。它就和define相对应,define是把一个自己起的名字的常量定义为代替它的另一个常量来同。typedef是把一个自己起的名字的类型用已经有的类型代替使用,如:typedef int Type1;之后如果有Type1 i ;系统则理解为int i;。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确...

什么是基本类型、构造类型、指针类型等?
构造类型也包括三种形式:数组类型、结构体类型和共用体类型。3、指针类型,C语言的精华是指针,指针类型不同于其他类型的特殊性在于:指针的值表示的是某个内存地址。4、空类型,关键字是void,其主要作用在于:对函数返回的限定;对函数参数的限定。也就是说,一般一个函数都具有一个返回值,将其值...

struct是什么类型的?
C语言中的struct是用户自定义数据类型(User Defined Type),它是没有权限设置的,它只能是一些变量的集合体,虽然可以封装数据却不可以隐藏数据,而且成员不可以是函数。struct用法和用int定义整型变量一样,struck就是在程序编辑初要声明的结构体变量。比如要编辑程序对一群学生进行特定筛选并输出,那么...

c语言struct和typedef struct有什么区别?
C语言结构体中struct和typedef struct区别为:声明不同、访问不同、重新定义不同。一、声明不同 1、struct:struct可以直接使用结构体名字声明结构体。2、typedef struct:typedef struct的为。修饰结构体,结构体有了别名,通过结构体别名声明结构体。二、访问不同 1、struct:struct定义的结构体变量...

结构体定义和使用是什么?
结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据。结构体类型不是由系统定义好的,而是需要程序设计者自己定义的。C语言提供了关键字struct来标识所定义的结构体...

关于结构体类型、结构体类型名以及结构体变量的区分?
PER per ; per就是定义好的结构体变量。12345678910111213141516171819202122typedef struct PER{ int n; char ch[8];}PER;一般这样定义结构体类型 定义变量的时候可以 struct PER per; 或者 直接 PER per; 而用你写的定义方法只能用 PER per 定义变量 如果这样写struct PER{ int n; ...

永安市15349506226: 结构体类型 - 搜狗百科
宰肾枢芬: 结构体类型就是以struct关键字定义的数据类型. 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.是一种聚合类型,里面可以包含多种数据类型,甚至可以结构体里嵌套结构体.相信我,等你深入理解了...

永安市15349506226: C语言中的结构体类型是什么? -
宰肾枢芬: 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成...

永安市15349506226: 关于结构体类型、结构体类型名以及结构体变量的区分? -
宰肾枢芬: 关键字 struct 就代表是一个结构体类型. PER就是就是这e799bee5baa6e78988e69d8331333431356632个结构体类型的名称. PER per ; per就是定义好的结构体变量. 12345678910111213141516171819202122typedef struct PER{ int n; ...

永安市15349506226: 什么是结构体类型?C语言中结构体类型占几个字节? -
宰肾枢芬: 结构体类型就是一种数据类型撒,譬如定义一个整型变量int a;意思是a的数据类型是整形的,定义一个结构体变量b,他的数据类型就是结构体类型的!!

永安市15349506226: c语言中定义结构体有哪些方法? -
宰肾枢芬: 1.结构体类型数据的定义方法和引用方法 定义结构体:struct 结构体名 { 成员列表 }; 定义结构体类型的变量:有三种形式 ① 定义类型时定义变量:struct 结构体类型名 { 成员列表 }变量名列表; ② 直接定义结构类型变量:struct { 成员列表 }变量...

永安市15349506226: 定义一个结构体类型,拥有char *string 和int length这两个成员,定义2个这种类型的结构体(以下称结构体1 -
宰肾枢芬: //定义一个结构体stu以及2个结构体变量stu1和stu2 struct stu{ char *string; int length; }; struct stu stu1,stu2;

永安市15349506226: 关于结构体定义的: -
宰肾枢芬: unsigned char TMR1IF:1; 这种定义方式在C/C++里面叫“位域”,你可以搜索一下这个概念. 就是在char的8位里面,定义其中的一个二进制位. 从上到下,一次占据一个char的每一个二进制位. 位域在本质上就是一种结构类型, 不过其成员...

永安市15349506226: 说明如何定义一个结构体类型,如何定义一个结构体变量. -
宰肾枢芬: 变量的定义也可以写成这样:struct mytype instance; 这个就是一个结构体类型mytype的定义,同时定义了一个该类型的结构体变量instance; }instancestruct mytype{int a;char b

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