精华内容
下载资源
问答
  • 个人认为是C语言实现面向对象编程非常重要的数据类型之一结构体的使用分为定义、引用、初始化,之后还有结构体数组、结构体指针、结构体作为函数参数包含结构的结构。结构体的定义、引用、初始化定义结构体为用户...

    结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。

    个人认为是C语言实现面向对象编程非常重要的数据类型之一

    结构体的使用分为定义、引用、初始化,之后还有结构体数组、结构体指针、结构体作为函数参数和包含结构的结构。

    结构体的定义、引用、初始化

    定义

    结构体为用户自定义数据类型,所以在定义结构体变量前需要先声明,一般形式为

    struct 结构体名

    {

    成员列表

    };

    声明后就可以定义结构体变量,结构体变量定义又分三种

    1.先声明再定义

    struct 结构体名

    {

    成员列表

    };

    struct 结构体名 变量名列表;

    2.声明的同时直接定义

    struct 结构体名

    {

    成员列表

    } 变量名列表;

    3.直接定义结构体变量

    struct

    {

    成员列表

    }变量名列表;

    引用

    结构体变量不能整体输出,只能对其成员变量进行运算,其中要用到成员运算符“.”

    一般形式为

    结构体变量名.成员名

    初始化

    结构体变量与其他数据类型一样,可以在定义时进行初始化,所以其初始化对应了三种定义,举其中一例

    struct 结构体名

    {

    成员列表

    };

    struct 结构名 结构体变量名={初始化值};

    上述讲了结构体变量定义、引用、初始化,下面为练习

    #include

    struct cs{

    char cName[9];

    char cSex[5];

    int iAge;

    };

    int main()

    {

    struct cs freshman={"小罗","男",18 };

    printf("name\tsex\tage\n");

    printf("%s\t%s\t%d\n",freshman.cName ,freshman.cSex ,freshman.iAge );

    return 0;

    }

    结构体数组

    有时需要定义的结构体变量众多,例如一个班级所用同学的基本信息,这时可以用到结构体数组来定义多个相同类型的结构体变量,它的定义与定义结构体变量类似,也有三种,举其中一例

    struct 结构体名

    {

    成员列表

    }数组名;

    数组中各数据在内存中存储是连续的,所以可用指针将数组所有数据输出

    结构体数组初始化结构体变量初始化相似,举其中一种

    struct

    {

    成员列表

    }数组名[元素个数]={初始值列表};

    也可以不用给出元素个数,编译器会自行判断元素个数。

    练习

    #include

    struct cs{

    char cName[9];

    char cSex[5];

    int iAge;

    }freshman[5]={{"小罗","男",18},

    {"小周","男",18},

    {"小马","男",18},

    {"小杨","男",18},

    {"小江","女",18}};

    int main()

    {

    int i;

    printf("name\tsex\tage\n");

    for(i=0;i<5;i++)

    {

    printf("%s\t%s\t%d\n",freshman[i].cName ,freshman[i].cSex ,freshman[i].iAge );

    }

    return 0;

    }

    结构体指针

    结构体指针指向一个结构体变量,定义形式如下

    struct 结构体名 *p //定义一个指向结构体类型的指针

    结构体指针可以访问结构体中成员变量,形式有两种

    1.(*p).成员名;

    2.p->成员名;

    其中(*p)必须加括号,因为成员运算符优先级高于取值运算符

    指向结构体数组的指针

    struct 结构体名 *p;

    p=数组名;

    这时指针p即指向结构体变量数组的首个数组变量

    练习

    #include

    struct cs{

    char cName[9];

    char cSex[5];

    int iAge;

    }freshman[5]={{"小罗","男",18},

    {"小周","男",18},

    {"小马","男",18},

    {"小杨","男",18},

    {"小江","女",18}};

    int main()

    {

    struct cs * p=freshman;

    int i;

    printf("name\tsex\tage\n");

    for(i=0;i<5;i++,p++)

    {

    printf("%s\t%s\t%d\n",p->cName ,p->cSex ,p->iAge );

    }

    return 0;

    }

    结构体作为函数参数

    有三种情况 使用结构体变量作为函参、用指向结构体变量的指针作为函参、用结构体变量成员做函参

    用结构体变量做函参

    #include

    int print(struct cs csman);

    struct cs{

    char cName[9];

    char cSex[5];

    int iAge;

    }freshman={"小罗","男",18};

    int main()

    {

    print(freshman);

    return 0;

    }

    int print(struct cs csman)

    {

    int i;

    printf("name\tsex\tage\n");

    printf("%s\t%s\t%d\n",csman.cName ,csman.cSex ,csman.iAge);

    return 0;

    }

    用指向结构体变量的指针做函参

    #include

    int print(struct cs * csman);

    struct cs{

    char cName[9];

    char cSex[5];

    int iAge;

    }freshman={"小罗","男",18};

    int main()

    {

    print(&freshman);

    return 0;

    }

    int print(struct cs * csman)

    {

    printf("name\tsex\tage\n");

    printf("%s\t%s\t%d\n",csman->cName ,csman->cSex ,csman->iAge);

    return 0;

    }

    使用结构体变量成员做函参

    形式与普通变量形式一样,以传值方式传递。

    包含结构的结构

    结构体变量也属于变量,所以可以声明在结构体中

    引用时需注意使用成员运算符到最低级成员变量,初始化时要用大括号

    #include

    struct date{

    int year;

    int month;

    int day;

    };

    struct cs{

    char cName[9];

    char cSex[5];

    int iAge;

    struct date apply;

    };

    int main()

    {

    struct cs freshman={"小罗","男",18,{2016,9,3}};

    printf("name\tsex\tage\tdata of application\n");

    printf("%s\t%s\t%d\t%d.%d.%d\n",freshman.cName ,freshman.cSex ,freshman.iAge,freshman.apply.year,freshman.apply.month,freshman.apply.day);

    return 0;

    }

    展开全文
  • 结构体 #include<stdio.h>...结构体定义和使用 //2.如何访问结构体: 目标.内部变量 struct Students { char name[128]; //特性:名字 int score; //特性:分数 //void(*pintroduces)(c

    结构体

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    //struct关键字
    //1.结构体的定义和使用
    //2.如何访问结构体:   目标.内部变量
    
    struct Students {
    	char name[128];                   //特性:名字
    	int score;                        //特性:分数
    	//void(*pintroduces)(char *pname);  //行为:函数指针(自我介绍)
    	char *p;
    	char q[128];
    
    }; //注意分号
    
    int main()
    {
    	struct Students stu1 = {"小帅",99};
    	printf("结构体:name=%s\n",stu1.name);
    	printf("结构体:score=%d\n",stu1.score);
    
    	struct Students stu2;
    	//stu2.name="不能这样写喔!";//C++,Java可以
    	strcpy(stu2.name,"小妹");
    	stu2.score=98;
    	printf("结构体:name=%s\n",stu2.name);
    	printf("结构体:score=%d\n",stu2.score);
    
    	struct Students stu3;
    	stu3.p=(char *)malloc(128);//必须开辟空间 如果是p[128]就不用
    	memset(stu3.p,'\0',128);
    	strcpy(stu3.p,"懂了不哦");
    	strcpy(stu3.q,"已经开辟");
    	printf("char *p:%s\nchar q[128]:%s\n",stu3.p,stu3.q);
    
    	return 0;
    }
    

    结构体成绩

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    struct Students
    {
    	int score; 
    	char *name; //数组浪费空间,  指针这里4字节,Linux下8字节                 
    	
    }; 
    
    int main()
    {
    	struct Students stus[5];
    	int i;
    	for(i=0;i<sizeof(stus)/sizeof(stus[0]);i++){
    		printf("请输入%d个学生的名字:\n",i+1);
    		stus[i].name=(char *)malloc(128);
    		scanf("%s",stus[i].name);     
    		printf("请输入%d个学生的分数:\n",i+1);
    		scanf("%d",&stus[i].score);   //取地址 
    		
    	}
    	for(i=0;i<sizeof(stus)/sizeof(stus[0]);i++){
    		printf("第%d个学生的名字和分数:",i+1);
    		printf("%s:%d\n",stus[i].name,stus[i].score);
    	}
    	
    	//找最高分和最低分
    	struct Students maxStu;
    	struct Students minStu;
    	maxStu=minStu=stus[0];
    	for(i=0;i<sizeof(stus)/sizeof(stus[0]);i++){
    		if(maxStu.score<stus[i].score){
    			maxStu=stus[i];
    		}
    		if(minStu.score>stus[i].score){
    			minStu=stus[i];
    		}
    	}
    	printf("考最高分的是%s:%d\n",maxStu.name,maxStu.score);
    	printf("考最低分的是%s:%d\n",minStu.name,minStu.score);
    
    	return 0;
    }
    

    结构体指针

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    struct Students
    {
    	int score; 
    	char name[128];                
    	
    }; 
    
    int main()
    {
    	struct Students stu1;
    	stu1.score=100;
    	strcpy(stu1.name,"漂亮妹妹");
    	printf("%s:%d\n",stu1.name,stu1.score); 
    	
    	struct Students *p;                                   //野指针 
    	p=(struct Students *)malloc(sizeof(struct Students)); //必须开辟空间 
    	p->score=98;                                          //不能用.运算符要用-> 
    	strcpy(p->name,"可爱小姐姐");
    	printf("%s:%d\n",p->name,p->score); 
    	
    	free(p);
    	p=&stu1;
    	printf("%s:%d\n",stu1.name,stu1.score); 
    	
    	printf("当前地址是:%p\n",p++);
    	printf("++后地址是:%p\n",p);
    	printf("E14-D90=%d\n",0X0062FE14-0X0062FD90);
    
    	return 0;
    }
    

    结构体指针成绩

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    struct Students
    {
    	int score; 
    	char *name;                
    	
    };
    
    int main()
    {	
    	int i;
    	int len;
    	printf("请输入人数:\n");
    	scanf("%d",&len);
    	
    	struct Students *p=(struct Students *)malloc(len*sizeof(struct Students));
    	
    	for(i=0;i<len;i++){
    		printf("请输入名字:\n");
    		p->name=(char *)malloc(128);
    		scanf("%s",p->name);
    		printf("请输入分数:\n");
    		scanf("%d",&(p->score));
    		p++;
    	}
    	p=p-len;
    	for(i=0;i<len;i++){
    		printf("名字:%s,分数:%d\n",p->name,p->score);
    		p++;
    	}
    
    	return 0;
    }
    
    展开全文
  • C语言结构体

    2020-05-23 22:15:42
    怎么使用结构体变量赋值初始化==如何取出结构体中的每一个成员==结构体变量的运算结构体变量和结构体变量指针作为函数形参传递的问题 一.结构体基础知识 1.为什么需要结构体 为了表示一些复杂的事物,而普通的...

    一.结构体基础知识

    1.为什么需要结构体

    			为了表示一些复杂的事物,而普通的基本类型无法满足实际要求
    

    2.什么叫结构体

    			把一些基本类型数据组合在一起形成的一个新的复合数据类型,这个叫结构体
    

    3.如何定义结构体

    关于结构体类型的定义的总结:

    一般格式就是;
    struct 结构体名(也就是可选标记名)
    {
        成员变量;
    }//使用分号表示定义结束;
    
    //第一种方式
    struct Student //定义了一个新的数据类型,并没有定义变量
    	{
    		int age;
    		float score;
    		char sex;
    	};
    //第二种方式
    	struct Student2
    	{
    		int age;
    		float score;
    		char sex;
    	}st2;
    //第二种方式
    	struct 
    	{
    		int age;
    		float score;
    		char sex;
    	}st3;
    //结构体中的  struct  结构体名   就等同于主函数中的数据类型 如:int double float之类
    

    4.怎么使用结构体变量

    赋值和初始化

    		定义的同时可以整体赋初值
    		如果定义完之后,只能单个赋值
    
    struct Student st = {80, 66.6, 'F'}; //初始化  定义的同时赋初值
    	struct Student st2;
    	st2.age = 10;
    	st2.score = 88;
    	st2.sex = 'F';
    
    

    如何取出结构体中的每一个成员

    	1.结构体变量名.成员名
    	2.指针变量名->成员名(常用)
    			指针变量名->成员名    在计算机内部会被转化为(*指针变量名).成员名的方式来执行
    
    	//例子
    	struct Student st = {80, 66.6, 'F'};
    	struct Student * pst=&st;//&st不能改成st
    	
    	pst->age=88;//第二种方式
    	st.age=10;//第一种方式
    |1.   pst->age在计算机内部会被转化为(*pst).age,这是一种硬性规定|
    |2.	  所以 pst->age  等价于(*pst).age  也等价于 st.age|
    |3.   我们之所以知道pst->age等价于 st.age,是因为pst->age是被转化为(*pst).age来执行| 
    |4.   pst->age的含义:
    					pst所指向的那个结构体变量中的age这个成员|
    
    

    结构体变量的运算

    		结构体变量不能相加,不能相减,也不能相乘
    		但结构体可以相互赋值
    
    struct Student
    {
    	int age;
    	char sex;
    	char name[100];
    }; //分号不能省
    struct Student st1,st2;
    st1+st2 或  st1*st2  或  st1/st2 都是错误的
    st1=st2  或  st2=st1都是正确的
    

    结构体变量和结构体变量指针作为函数形参传递的问题

    结构体变量和结构体变量指针作为函数形参传递问题的实例

    二.结构体的综合运用

    运用指针和结构体创建学生信息管理系统

    动态构造存放学生信息的结构体数组:
    				动态构造一个数组,存放学生的信息
    				然后按分数排序输出
    

    学生管理系统实例

    展开全文
  • C语言结构体中添加成员函数

    千次阅读 2017-05-06 15:56:00
    我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构结构体非常的相似,所以,为什么不想想如何C语言...

      我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结构体中添加成员变量呢

      在C语言的结构体中是不能直接定义成员函数的,这点和C++不同,但是我们可以通过定义一个函数指针的方式来指向一个方法。

      示例代码如下:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 typedef struct node
     4 {
     5     int a;
     6     void(*p)(int b);
     7 }no;
     8 
     9 void fun(int b)
    10 {
    11     printf("hello,%d\n",b);
    12 }
    13 
    14 int main()
    15 {
    16     no a = { 1,fun };
    17 
    18     a.p(a.a);
    19     system("pause");
    20     return 0;
    21 }

      这段代码运行出来,控制台会打印出hello,1.这就表面明了,我们成功的调用了函数,并且成功的传递了参数进去。

    转载于:https://www.cnblogs.com/swust-wangyf/p/6817055.html

    展开全文
  • Day07 郝斌C语言自学视频之C语言的结构体结构体为什么需要结构体什么叫结构体如何定义结构体怎样使用结构体变量结构体变量和结构体指针作为函数参数传递的问题结构体变量的运算动态构造存放学生信息的结构体数组...
  • 对于系统参数较多时,我们常常使用结构体来进行管理。 如下面的实例,这是一个基于STM8系列单片机开发的某个产品的系统参数。这些参数被定义为系统配置结构体的成员变量。这些成员变量的类型都是不同的,所占的存储...
  • C语言中的struct是最接近类的概念,但是在C语言的struct中只有成员,不能有函数,但是可以有指向函数的指针,这也就方便了我们使用函数了。 c语言中,如何结构体中实现函数的功能?把结构体做成类相似,让他的...
  • 如何C语言中建立自己的数据结构 c语言提供了一些由系统已定义好的数据类型如int,float,char等,但只有这些类型还不能满足应用的要求,C语言中用户...# 定义和使用结构体变量 ## 使用结构体数组 ### 结构体指针 ...
  • 内存管理之结构体数据结构的意义简单的数据结构-数组数组的优势劣势使用方法细节结构体的声明结构体的高级使用方法结构体内嵌指针实现面向对象 数据结构的意义 数据结构就是研究数据如何组织(在内存中排布),...
  • 文章目录1 什么是结构体2 定义结构体3 使用结构体变量3.1 赋值初始化3.2 如何取出结构体变量中的每一个成员3.3 结构体指针3.4 传地址还是传内容3.5 结构体变量的运算4 动态构造存放学生信息的结构体数组 ...
  • 本章学到了结构体如何构建,用typedef进行重定义结构体,结构指针,访问结构体的方式等。 文件:文件的读取,文件读写的几个函数,基本了解了文本文件二进制文件,以及怎样修改文件中的数据,文件使用完后要记得...
  • 指针如何使用?****指针运算****4.我们要知道的两个符号:****5.NULL指针:****6.C中指针的指针 :****7.指针的2个重要属性****8.定义指针变量****9.取地址****10.解地址****11.坏指针****12.void\*类型指针****13....
  • 在C++中,我们常见到用类定义一个对象,这个对象可以有他自己的属性(数据)方法(函数),而在C语言的正常语法中,是禁止在结构体定义函数的。  在一个关于触摸屏的驱动程序中发现,用C语言的也可以实现对象...
  • c语言重点与难点

    2020-05-29 20:28:22
    期末测试,复试,面试一些c语言中...3.2普通结构体变量和结构体指针变量 3.3typedef函数的使用 3.4指针与结构体的结合使用 4.动态内存的分配释放 4.1如果使用malloc函数进行动态内存的分配释放 4.2跨函数使用内存
  • 上一篇笔记讲解了结构体的基本概念和结构体变量的定义和使用,这一篇将介绍结构体数组,结构体指针,位结构,结构体等内容。 1.结构体数组 我们上一篇知道如何定义一个学生变量,可是要是一个班级有40个学生的话我们...
  • 1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38...
  • 高级C语言详解

    2012-08-18 09:49:27
    1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38...
  • 免费下载:C语言难点分析整理.doc

    千次下载 热门讨论 2012-02-29 15:30:53
    1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38...
  • C语言难点分析整理

    2013-07-19 15:09:14
    1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38...
  •  一维数组、二维数组、多维数组、字符数组、动态数组的定义和引用,以及操作数组时的各种常见错误解析;  不同类型的指针之间的区别,以及指针的一般用法和注意事项;  指针与地址、数组、字符串、函数之间...
  • C语言进阶-牟海军.pdf

    2017-07-25 10:58:37
     一维数组、二维数组、多维数组、字符数组、动态数组的定义和引用,以及操作数组时的各种常见错误解析;  不同类型的指针之间的区别,以及指针的一般用法和注意事项;  指针与地址、数组、字符串、函数之间的...
  • 152_结构体2_如何定义结构体[3种方式] 151_结构体1_为什么需要结构体 什么叫结构体【重点】 150_指针_30_跨函数使用内存习题测试【重点】 149_指针_29_动态内存可以跨函数使用详解【重点】用 148_指针_28_静态变量不...
  • 史上最强的C语言资料

    热门讨论 2010-06-17 18:43:14
    1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38...
  • 1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38...
  • 高级进阶c语言教程..doc

    热门讨论 2010-05-10 20:15:11
    1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针引用的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38...
  • libzdb c语言的数据库连接池支持库 源码...在ConnectionDelegate.h文件里定义了一个结构体,这个结构体是保存一个数据库连接的所有信息操作方法,这里的方法都是使用函数指针定义的。 typedef struct Cop_T {
  • 11.2 指针变量的定义和指针变量的基类型 90 11.3 指针变量的赋值及基本操作 91 11.3.1 给指针变量赋地址值 91 11.3.2 给指针变量赋“空”值 91 11.3.3 通过指针来引用一个存储单元 92 11.3.4 移动指针 94 ...
  • c 使用winsock实现serverclient(通讯程序) c 随机数发生器 c 图形模式详解 c 网页爬虫 c 写图形界面 c 遗传算法实例 c 在图形界面输出文字 c# List的用法 VS2010如何解决每次编译都要重新生成
  • C语言深度揭秘

    2012-04-12 13:21:16
    1.14.1,空结构体多大?.......................................38 1.14.2,柔性数组...................................................39 1.14.3,struct与 class的区别...............................40 1.15...
  • 数据结构与算法入门C语言数据结构概述一、数据结构定义二、算法定义三、 衡量算法的标准四、 数据结构的地位五、预备知识所有的指针变量只占4个字节,用第一个字节的地址表示整个变量的地址如何通过函数修改实参的值...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

c语言结构体指针如何定义和使用

c语言 订阅