c语言结构体类型
㈠ c语言结构体定义
C语言结构体定义:struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
(1)c语言结构体类型扩展阅读
1、struct是声明结构体类型时必须使用的关键字,不能省略。“结构体”这个词是根据英文单词structure译出的。
2、structSTUDENT是定义的数据类型的名字,它向编译系统声明这是一个“结构体类型”,包括name、num、sex、age、score、addr等不同类型的项。
3、structSTUDENT与系统提供的int、char、float、double等标准类型名一样,都是数据类型,具有同样的作用,都是用来定义变量的。
㈡ C语言结构体类型
呵呵,前面的都没说到问题的本质.
建议你先去了解下什么是指针,什么是指针变量.
因为指针变量是存放指针的,并没有被分配所指向数据类型的内存.
从你第一个结构体类型来看是错的,因为struct student kobe; 这样是申请一个结构体变量,这样就分配内存了,这里请理解普通变量和指针变量的区别!接着这样造成的后果是会无休止申请结构体变量->分配内存->申请结构体变量->分配内存....
但是指针变量就不同,只占4个字节而已.并非真正意义上的结构体变量,因为它所占有的内存并非是结构体大小的内存.
这都需要自己去多写程序,多理解,说不明白的,只能自己悟.
㈢ C语言中结构体类型名和结构体变量名
structREC
{intn;charc;};
structRECt1,t2;
//这样写才是对的啦~~
㈣ C语言结构体类型问题
这个跟以往的调用交换函数后数值没变是一个道理
虽然函数Mp1中oneday的year改变了
但是实际上主函数中oneday这个结构体的存储地址里的内容一直没变
㈤ C语言中结构体类型名与变量名的区别
关于结构体类型,有几点要说明:
(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的结构见图7.3所示。图7.3
(5) 结构体中的成员名可以与程序中的变量名相同,但二者没有关系。
例如,程序中可以另定义一个整型变量num,它与student中的num是两回事,互不影响
以上来自网络
而变量名是用户定义的标识符
如定义了一个名为SU的结构类型,SU a;a就是变量名,SU就是结构类型名
㈥ C语言结构类型
typedef struct Node{
int data;
struct Node *next;
}LNode;
Node是一个结构体的名称,定义时需要struct Node ff;这种 ,ff是变量。
LNode 是Node 的另外一个名字,原因是因为你用了“typedef " , 你可以直接LNode ff;这样来定义这种结构体的变量
这种写法算是给struct 类型 Node另外起一个名字吧
typedef struct {
int data;
struct Node *next;
}LNode;
这种写法是直接把这个结构体另外命名为LNode,
也就是说没有了struct Node ff;这种定义方法,只能用LNode ff;来 定义。
原因还是因为typedef, 如果没有这个关键字的话,LNode只是一个这种结构体的变量,不能用来定义,也就是说这种结构体只有一个变量就是————LNode
例如: LNode ff;这种方法是错误的。
typedef struct {
int data;
struct *next;
}LNode;这种是不可以通过的,至少我看到的是不可以,错误是因为 struct *next; 有问题。
㈦ c语言结构体类型和结构体变量分别是什么
结构体(structure)是一个或多个相同数据类型或不同数据类型的变量集合在一个名称下的用户自定义数据类型。
struct
结构体名
{
成员列表;
};
㈧ C语言中的结构体类型是什么
结构体是一种数据集合。结构体里面可以包含多个变量或数组,这些变量/数组的类型可以相同、也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。
结构体是一种非常实用的类型,可以将具有逻辑关联的不同类型数据统合在一起统一管理,可以说是面向对象思维的最底层的基础。
㈨ c语言中如何定义一个结构体
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。
结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明。
(9)c语言结构体类型扩展阅读:
一、结构体作用:
结构体和其他类型基础数据类型一样,例如int类型,char类型,只不过结构体可以做成你想要的数据类型,以方便日后的使用。
在实际项目中,结构体是大量存在的,研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
二、结构体的大小与内存对齐:
结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。
所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。
程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。
三、结构体的规则:
1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。
㈩ 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,浮点型变量。 应注意在括号后的分号是必不可少的。