C语言程序设计教程笔记_复杂数据类型_结构体

实际应用中会有一些不同数据类型组成的数据实体,这些不同的数据类型的数据项是相互联系的,应该组成一个有机的整体。如果用单独的数据项来表示,就不能体现数据的整体性,不便于操作。

C中使用结构体这种数据类型表示这种数据实体。结构体中的数据项称为成员。


结构体类型的定义


模式为:

Struct 结构体变量名 {

成员变量类型 成员变量名;

成员变量类型 成员变量名;

...

}

注意:结构体是用户自定义的类型,与系统定义的基础数据类型一样可以定义变量。

//可见类型这个概念不只是面向对象语言的专利

结构体的成员类型可以是结构体类型,但不能定义自己类型的成员。//这和类的概念不同


结构体类型变量


定义


三种方法定义结构体变量

 1.先定义结构体类型在定义变量。

 2.定义结构体同时定义变量。

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


使用


引用一个结构体变量有两种方式。

1.直接引用:使用变量名引用,使用“.”符号引用。

2.间接引用:使用指向结构体的指针引用,使用“->”符号引用。


变量的初始化

A = {123,"张三",'f',"**学院"}



结构体类型数组


定义:

struct student students[80]; 

初始化:

students = {{123," 张三 "},{124," 李四 "},{...}}

使用:...


结构体类型指针


指向结构体变量:


Struct 结构体类型 *指针变量名


指向结构体数组元素:


同数组指针


结构体和函数



结构体变量作为函数参数


老的C标准不允许把结构体变量当作参数传递,只允许传递结构体变量的指针作参。新的C标准和编译系统都允许使用结构体变量作为参数传递。


指向结构体变量的指针作为函数参数


把一个完整的结构体变量作为参数传递虽然合法,但是要将全部成员值一个一个传递费时间又费空间,开销大。如果结构体类型中的成员很多,或者有一些成员是数组,则程序运行效率会大大降低。这种情况下使用结构体变量的指针作为参数传递能提高效率。


函数返回值为结构体类型


此处待续


自己的理解:


结合结构体理解指针:指针的本质是某种变量的地址,他的核心优势是在程序运行中减少寻址的过程,因为当使用一个变量的时候应该先按照变量名找到这个变量的地址(&变量名的过程),然后在针对内存中的数据进行操作。但是如果使用指针的话,就减少了寻址的这个环节。大大节省了程序运行的时间和空间。


改正:[

指针是有省略寻址的优势,但这不是它的核心。指针的核心优势应该是使程序能对某一个内存空间直接进行操作,特别体现在函数才传参上。一个函数接受常规变量的传入参数,则只能对此函数周期中的形参进行操作,而不能改变实参的值。而当你传入一个指针类型的变量参数时,则可以直接操作实参。这是指针的意义所在。

int f(int b) /*b为形参*/ 

{ return b;} 

main() 

{int a=1; 

printf("%d",f(a));/*a为实参*/ 

}

]


结构体的概念:因为是先学习了面向对象的语言java所以对对象的概念比较熟悉。C中的结构体类似java中类的概念,二者的本质相近,都是为了封装。只不过java中的类除了封装数据之外还封装了操作(方法),C中的结构体只是封装了数据。另外C中的结构体不能拥有本类型的成员,这个是和java中类的概念不同的。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值