C语言中的结构体
一、为什么要用结构体?
1、背景:例如输出一个学生成绩的最高分最低分,但是最高分那个同学的其他信息如何获取呢?
答:这样就利用了结构体,把多个变量放在结构体中。
2、数组和结构体区别?
数组:类型相同的一组数集合
结构体:类型不同一组数集合
实例:例如某网站需要注册账号,需要填的姓名,邮箱、手机号等信息。
3、扩展: Java中 class就是一个类,与C语言中结构体类似。大家都知道c语言是面向过程的; Java php c++ python等是面向对象的。然而c语言可以利用结构体思想进行面向对象编程,只不过是麻烦了些。
4、结构体特点: 数据量多、大、丰富。
二、结构体定义和使用
1、先说下常见变量的定义和使用
类型 | 变量 | 初始值 |
---|---|---|
int | a | 10 |
cha | c | ‘a’ |
float | f | 1.23 |
double | d | 3.1415 |
char | *p | “winston” |
…
2、结构体定义
(1)、先定义结构体再定义变量名
struct 结构体名
{
数据类型 成员1;
数据类型 成员2;
数据类型 成员n;
};
struct 结构体名 变量名;
(2)、在定义结构体同时定义变量
struct 结构体名
{
数据类型 成员1;
数据类型 成员2;
数据类型 成员n;
}变量名;
(3)、直接定义结构体类型变量
struct
{
数据类型 成员1;
数据类型 成员2;
数据类型 成员n;
}变量名;
注意:结构体}后面的分号一定要有。
3、结构体使用
struct 结构体类型名 + 内部变量;
4、实例程序如下:
#include <stdio.h>
#include <stdlib.h>
/*struct Datas 模板的作用*/
struct student //自定义的类型
{
int score; //特性:名字
char name[128]; //特性:分数
void (*introduce)(char *pname); //行为: 函数指针 (自我介绍)
};
int main()
{
// 类型 变量名 初始值 (参照int a=10;)
struct student stu1={95,"winston"}; //struct student 相当于类型
printf("结构体:score = %d\n",stu1.score);
printf("结构体:name = %s\n",stu1.name);
struct student a={100,"cwf"};
printf("结构体:score = %d\n",a.score);
printf("结构体:name = %s\n",a.name);
struct student test; //int a; a=10;
test.score = 99;
//test.name="wxz"; 这种方式在c语言中错误 必须要用strcpy拷贝字符串
strcpy(test.name,"wxz");
printf("结构体:score = %d\n",test.score);
printf("结构体:name = %s\n",test.name);
system("pause");
return 0;
}
5、程序运行结果
三、C语言结构体的真面目!!!!
1、其实结构体只不过是将旧的知识重新整合,换了一种新的用法。
举例说明 直接看代码
#include <stdio.h>
#include <stdlib.h>
//结构体里面的那些东西,都是我们熟悉的东西 结构体就是纸老虎!!! 旧知识新用法
void func(int data){
printf("函数:data=%d\n",data);
}
int main()
{
int a=10;
printf("a=%d\n",a);
char c='H';
printf("c=%c\n",c);
float f=1.2;
printf("f=%f\n",f);
double d=3.4;
printf("d=%lf\n",d);
char *str="i miss cwf!"; //初始化可以直接用指针变量指向该字符串
puts(str);
void (*p)(int data)=func; //函数指针
p(10);
system("pause");
return 0;
}
程序结果
2、如何利用结果体实现相同的结果呢?
#include <stdio.h>
#include <stdlib.h>
//结构体里面的那些东西,都是我们熟悉的东西 结构体就是纸老虎!!! 旧知识新用法
void func(int data){
printf("函数:data=%d\n",data);
}
struct Data
{
int a;
char c;
float f;
double d;
char str[128];
void (*p)(int a);
};
int main()
{
printf("使用结构体实现相同结果\n");
printf("======================\n");
struct Data d1;
d1.a=100;
d1.c='H';
d1.f=1.2;
d1.d=3.4;
strcpy(d1.str,"i miss cwf!");
d1.p=func;
printf("a=%d\n",d1.a);
printf("c=%c\n",d1.c);
printf("f=%f\n",d1.f);
printf("d=%lf\n",d1.d);
puts(d1.str);
d1.p(10);
system("pause");
return 0;
}
程序结果:
说明:机械专业在校大学生,不喜勿喷!如有错误请联系我 谢谢!