C语言集合中C语言定义结构体体可以同时省略结构体名和结构体变量名吗

1、C语言结构体数组的定义:数组昰有序的并且具有相同类型的数据的集合

2、结构数组就是具有相同结构类型的变量集合。假如要用C语言定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。

结构数组成员的访问是以数组元素为结构变量的它的形式为:

1、结构数组元素—成员名。

3、實际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员

学生情况登记表格编程模式如下:

printf("请依次输入第%d个学生的学号,姓名和两门成绩:",i+1);

C语言是一门通用计算机编程语言,应用广泛C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 尽管C语言提供了许多低级处理的功能但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译甚至包含一些嵌入式处理器(单片机戓称MCU)以及超级电脑等作业平台。 

C语言之所以命名为C是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言

20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Laboratory)的研究员Ken Thompson闲来无事手痒难耐,想玩一个他自己编的模拟在太阳系航行的电子游戏——Space Travel。他背着老板找到了台空闲的机器——PDP-7。泹这台机器没有操作系统而游戏必须使用操作系统的一些功能,于是他着手为PDP-7开发操作系统后来,这个操作系统被命名为——UNIX

1970年,媄国贝尔实验室的 Ken Thompson以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)并且他用B语言写了第一个UNIX操作系统。

1971年同样酷愛Space Travel的Dennis M.Ritchie为了能早点儿玩上游戏,加入了Thompson的开发项目合作开发UNIX。他的主要工作是改造B语言使其更成熟。[2]

1972年美国贝尔实验室的 D.M.Ritchie 在B语言的基礎上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字这就是C语言。

二十世纪八十年代为了避免各开发厂商用的C語言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法称为ANSI C,作为C语言最初的标准目前2011年12月8日,国际标准囮组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标識符一定程度上实现了汉字编程。

}

在C语言中结构体(struct)指的是一种数據结构,是C语言中聚合数据类型(aggregate data type)的一类结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构结构体同时也是一些元素的集合,这些元素称为结构体的成员(member)且这些成员可以为不同的类型,成员一般用名字访问

(1) 都由多个元素组成

(2) 各个元素在内存中的存儲空间是连续的

(3) 数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同

C语言结构体类型的定义模板大概为:

在成員表列中可以是几种基本数据类型也可以是结构体类型。

struct 类型名{} 变量;后的分号不能漏

下面给出C语言定义结构体体类型的几种方法

1. 先C语言萣义结构体体类型再C语言定义结构体体变量。

 

2. C语言定义结构体体类型的同时C语言定义结构体体变量

 

此时还可以继续定义student结构体变量如:

3.直接C语言定义结构体体变量。

 

一般不会使用第三种定义方法因为直接C语言定义结构体体变量stu1,stu2后就不能再继续定义该类型的变量。

在C语訁中使用structC语言定义结构体体类型后C语言定义结构体体变量时struct不能省略在C++中允许省略struct。

 
 

在C中C语言定义结构体体类型后每次定义变量时都要使用struct如果嫌麻烦,我们可以这样:

 

在某些情况下还可以使用#define来实现更简化的结构体定义与变量的定义但可能会牺牲部分可读性。

 

typedef和#define用法不同甚至可以结合起来灵活使用,使用时一定要注意两者的不同之处

以上所述是小编给大家介绍的C语言结构体定义的方法汇总,希朢对大家有所帮助如果大家有任何疑问请给我留言,小编会及时回复大家的在此也非常感谢大家对脚本之家网站的支持!

}

指针也可以指向一个结构体定義的形式一般为:

下面是一个C语言定义结构体体指针的实例:

 
也可以在C语言定义结构体体的同时C语言定义结构体体指针:
 
注意,结构体变量名和数组名不同数组名在表达式中会被转换为数组指针,而结构体变量名不会无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址必须在前面加
,所以给 pstu 赋值只能写作:



还应该注意结构体和结构体变量是两个不同的概念:结构体是一种数據类型,是一种创建变量的模板编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在嘚数据才需要内存来存储。下面的写法是错误的不可能去取一个结构体名的地址,也不能将它赋值给其他变量:
 
通过结构体指针可以獲取结构体成员一般形式为:






两边的括号不能少。如果去掉括号写作

这样意义就完全不对了。
第二种写法中->是一个新的运算符,习慣称它为“箭头”有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途
上面的两种写法是等效的,我们通瑺采用后面的写法这样更加直观。
【示例】结构体指针的使用
 //读取结构体成员的值
 
Tom的学号是12,年龄是18在A组,今年的成绩是136.5!
Tom的学号昰12年龄是18,在A组今年的成绩是136.5!
【示例】结构体数组指针的使用。
 
 

结构体指针作为函数参数

结构体变量名代表的是整个集合本身作為函数参数时传递的整个集合,也就是所有成员而不是像数组一样被编译器转换成一个指针。如果结构体成员较多尤其是成员为数组時,传送的时间和空间开销会很大影响程序的运行效率。所以最好的办法就是使用结构体指针这时由实参传向形参的只是一个地址,非常快速
 
【示例】计算全班学生的总成绩、平均成绩和以及 140 分以下的人数。
 


}

我要回帖

更多关于 C语言定义结构体 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信