C语言之结构体

C语言中的结构体

一、为什么要用结构体?

1、背景:例如输出一个学生成绩的最高分最低分,但是最高分那个同学的其他信息如何获取呢?
答:这样就利用了结构体,把多个变量放在结构体中。

2、数组和结构体区别?
数组:类型相同的一组数集合
结构体:类型不同一组数集合
实例:例如某网站需要注册账号,需要填的姓名,邮箱、手机号等信息。

3、扩展: Java中 class就是一个类,与C语言中结构体类似。大家都知道c语言是面向过程的; Java php c++ python等是面向对象的。然而c语言可以利用结构体思想进行面向对象编程,只不过是麻烦了些。

4、结构体特点: 数据量多、大、丰富。

二、结构体定义和使用

1、先说下常见变量的定义和使用

类型变量初始值
inta10
chac‘a’
floatf1.23
doubled3.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;
}

程序结果:
在这里插入图片描述

说明:机械专业在校大学生,不喜勿喷!如有错误请联系我 谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值