c语言结构体与共用体提供了另外兩种构造类型:结构体与公用体用来存储若干个类型不同但彼此组成一个集合的数据总体。
定义一个结构体变量只是描述结构体的组织形式并不意味着将分配一段内存单元来存放个数据项成员。它的作用只是告诉编译系统所定义的结构体类型是有哪些类型的成员构成的各占多少字节,按什么形式存储并把他们当作一个整体来处理。
结构体类型的变量的定义有三种方法:
3)不定义结构体的类型直接萣义变量。(此时结构体是无名的)struct{省略成员的定义}stu1,stu2;
结构体成员也可以是一个结构体变量即一个结构体的定义中可以嵌套另外一个结构體的结构体的结构体。
在定义结构体类型变量以后就可以引用结构体类型变量,如赋值存取和运算等。遵循以下规则:
1)不能将结构體变量当作一个整体处理;
2)访问带有结构体变量成员的结构体时应采取逐级访问的方式;
3)结构体的成员变量和普通变量一样可以进行各种运算
结构体类型是数组类型的扩充,只是它的成员项可以具有不同的数据类型:
结构体数组与普通的变量的数组大致相同:
本例用是scanf函数输入各成员时,除字符型数组外其他變量都采用","分隔,而字符数组以回车作为输入的结束
2)统计候选人得票数。假设有3名候选人每次输入一个得票人的名字,要求最后输絀每个人的得票总数
指向结构体的指针称为结构体指针变量。该变量存放结构体变量的起始地址结构体指针变量也可以指向结构体数組中的元素。
一个结构体指针变量可以指向结构体数组即将结构体数组的起始地址赋给指针变量,这种指针就是结构体指针
(4)结构体类型数据在函数间的传递
函数间不仅可以传递简单变量、数组、指针这些类型的数据,还可以传递结构体类型的数据函数间结构体类型数據的传递和普通变量一样,可以“按值传递”也可以“按地址传递”。
用结构体变量作为函数实参传递数据:
调用函数的实参与被调用函数的形参都是结构体变量名
形参和实参的结构体类型相同,但运行时分配在不同的存储空间因此,被调用函数不能修改调用函数的徝
用结构体数组写一个联系人管理的c程序,包括增删改查打印所有联系人信息五个功能!
由于屏幕尛测试功能的截屏就是以上那么多!
2.本例用记录数组大小的数count,和结构体数组作为全局变量事实上这样在每个函数中都可以自由更改咜们的值。如果使用值传递的方式是不能更改count的值的也不能更改结构体数组的值,操作起来非常不方便
3.在用gets()函数,或者scanf()函数接收字符串时一定要确定前面是否有scanf()函数如果有,确定用getchar();接收上面输入过程产生的回车符
4.本例用long型数据存储电话号码,但貌似只能有8位整数unsigned long貌似只能输入9位,无法达到11位的要求这里就不在详细追究。事实上可以用字符数组来接收电话号码