精华内容
下载资源
问答
  • 指向结构体变量的指针与链表结构的关系应用1、 一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的其实地址。指针变量也可以...

    指向结构体变量的指针与链表结构的关系应用

    1、   一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的其实地址。指针变量也可以用来指向结构体数组的元素。

    例如:声明一个结构体Student类型,定义一个Student结构体类型变量stu,声明一个Student指针*p指向stu的地址,我们可以通过stu调用Student结构体类型的成员变量,相应的,因为*p指向stu的内存的起始位置,所以我们可以通过调用*p来调用stu的成员变量,例如:(*p).name,(*p).age来赋值操作等等,注意*p的括号不可省略,因为成员运算符”.”优先级大于”*”。

    2、   指向运算符:

    为了使用方便直观,C++提供了指向结构体变量的运算符->,例如:p->num表示指向p当前指向的结构体变量中的成员num。p->num和(*p).num等价。

    总结:如下三种形式等价:

    结构体变量.成员名。如stu.num

    (*p).成员名。如:(*p).num

    p->成员名。如p->num。”->”称为指向运算符。

    分析如下几种运算:

    p->n:得到p指向的结构体变量中的成员n的值

    p->n++:得到p指向的结构体变量中的成员

    n的值,用完该值后使它加1.

    ++p->n:得到p指向的结构体变量中的成员n的值,并使之加1然后再使用。

    3、   用结构体变量和指向结构体变量的指针构成链表

    a) 链表是一种常见的重要的数据结构。

    b) 链表有一个“头指针“变量,用来存放一个地址。该地址指向一个元素。链表中的每一个元素称为”结点“,每个结点都应包括两个部分:一是用户需要用的实际数据,二是下一个结点的地址。最后一个元素不再指向其他元素,称为”表尾“,它的地址部分放一个”NULL“(空地址),链表到此结束。

    c)  链表中各元素在内存中的存储单元可以是不连续的。查找元素可以通过前后链表之间的关系查找,前一个链表的第二个元素的地址是下一个链表的第一个元素。

    d) 这种链表的数据结构,必须利用结构体变量和指针才能实现。可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一个结点地址的指针变量。例如:

    struct Student

    {

    int num;

    float score;

    Student*next;

    };

    其中成员num和score是用户需用用到的数据,next是指针类型的成员,指向Student类型数据,用来存放下一个结点的地址。设计者不必知道各个结点的具体地址,只要保证能将下一个节点的地址放到前一个结点的成员next中即可。

    建立并输出一个简单链表:

    /*

    *table.cpp

    *

    * Created on: 2012-4-8

    *     Author: David

    */

    #defineNULL 0

    #include

    structStudent

    {

    longnum;

    floatscore;

    structStudent *next;

    };

    intmain()

    {

    Studenta,b,c,*head,*p;

    a.num=31001;a.score=89.5;//对结点a的num和score成员赋值

    b.num=31003;b.score=90;//对结点b的num和score成员赋值

    c.num=31007;c.score=85;//对结点c的num和score成员赋值

    head=&a;     //将结点a的起始地址赋给头指针head

    a.next=&b;   //将结点b的起始地址赋给a结点的next成员

    b.next=&c;   //将结点b的起始地址赋给b结点的next成员

    c.next=NULL;//结点的next成员不存放其他结点地址

    p=head;     //将p指针指向a结点

    do

    {

    cout<num<score<

    p=p->next;   //使p指向下一个结点

    }

    while(p!=NULL);//输出完c结点后p的值为NULL

    return0;

    }

    开始时使head指向a结点,a.next指向b结点,b.next指向c结点,这就构成链表关系。第一行用#define命令定义了符号常量NULL代表0,在16行将0地址赋给c.next的作用是使c.next不指向任何有用的存储单元。

    4、   静态链表:所有结点(结构体变量)都是在程序中定义的,不是临时开辟的,也不用用完后释放,这种链表称为静态链表。

    5、   动态链表:各结点是可以随时插入和删除的,这些结点并没有变量名,只能先找到上一个结点,才能根据它提供的下一结点的地址找到下一个结点。

    6、   只提供第一个结点的地址叫做头指针head,只有有了头指针,链表才能访问整个链表。0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • 怎样通过指向结构体变量的指针访问结构体变量中成员。 #include <stdio.h> #include <string.h> struct Student{ long int num; char name[15]; char sex; float score; }; int main()...

    解题思路:在已有的基础上,本题要解决两个问题:
    怎样对结构体变量成员赋值;
    怎样通过指向结构体变量的指针访问结构体变量中成员。

    #include <stdio.h>
    #include <string.h>
    struct Student{
     long int num;
     char name[15];
     char sex;
     float score;
    };
    int main()
    {
     struct Student stu,*p;
     p=&stu;//因为stu不是数组所以要加上&符号
     stu.num=10101;
     strcpy(stu.name,"libai");//strcpy函数是将字符串 复制给stu.name
     //使用strcpy函数的时候要声明 #include <string.h>
     stu.sex='f';
     stu.score=99.8;
     printf("学号:%ld\n",stu.num);
     printf("姓名:%s\n",stu.name);
     printf("性别:%c\n",stu.sex);
     printf("分数:%5.1f\n",stu.score); 
     //注意,上面的输出语句可以改成下面的输出语句
     //printf("学号:%ld\n",(*p).num);
     //printf("姓名:%s\n",(*p).name);
     //printf("性别:%c\n",(*p).sex);
     //printf("分数:%5.1f\n",(*p).score); 
     return 0;
    } 
    
    
    
    结果显示:
    学号:10101
    姓名:libai
    性别:f
    分数: 99.8

    说明:
    为了使用方便和直观,C语言允许把(*p).num用p->num来代替
    (*p).name等价于p->name
    如果p指向一个结构体变量stu,以下等价:
    ① stu.成员名(如stu.num)
    ② (*p).成员名(如(*p).num)
    p->成员名(如p->num)

    输出信息的所有方法
    #include <stdio.h>
    struct Student{
      int a;//学号
      char b[20];//姓名
      int c;//成绩   
     } ;//声明结构体类型
    int main(){
     struct Student st,*pst;//定义结构体变量,和结构体指针 
    struct Student student[3]={
     {201902,"li",78},
     {201904,"chen",92},
     {201909,"zheng",88}
     };
     pst=&st;//指向结构体变量的指针
     st.a=201901;
    // (*pst).a=201901; 
    // pst->a=201901;//只针对结构体指针引用其成员 ,引用运算符->左侧是结构体指针,右侧是结构体成员 
     / 
     pst=student;//指向结构体数组的指针 
     int i;
     for(i=0;i<3;i++)
      printf("%d %s %d\n",student[i].a,student[i].b,student[i].c);
      //printf("%d %s %d\n",(*(student+i)).a,(*(student+i)).b,(*(student+i)).c);
      //printf("%d %s %d\n",pst[i].a,pst[i].b,pst[i].c);
      //printf("%d %s %d\n",(*(pst+i)).a,(*(pst+i)).b,(*(pst+i)).c);
      //printf("%d %s %d\n",(pst+i)->a,(pst+i)->b,(pst+i)->c);
    }
    
    
    结果显示:
    201902 li 78
    201904 chen 92
    201909 zheng 88
    展开全文
  • C语言结构体结构体引例结构体变量的定义结构体变量的使用结构体变量作为函数参数结构体变量的初始化 结构体 引例 输出平均分最高的学生信息 #include <stdio.h> struct student { int num; char name[10]; ...

    上一篇文章:返回指针值的函数+指向函数的指针+main()函数的参数

    C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数

    结构体

    引例

    输出平均分最高的学生信息

    #include <stdio.h>
    struct student
    {
    	int num;
    	char name[10];
    	int computer,english,math;
    	double average;//这些都是结构体成员
    };//注意这个分号不要可少,否则会报错
    int main()
    {
    	int i,n;
    	struct student s1,max;//定义结构体变量s1和结构体变量max
    	printf("Input n:");
    	scanf("%d",&n);//n是学生的个数
    	printf("Input the student's number, name and course scores:\n");
    	for(i=1;i<=n;i++)//用for循环实现n个学生成绩的输入
    	{
    		printf("No.%d:",i);//提示学生的序号
    		scanf("%d%s%d%d%d",&s1.num,s1.name,&s1.math,&s1.english,&s1.computer);
    		//分别给结构体里面的变量输入数值
    		s1.average=(s1.math+s1.english+s1.computer)/3.0;//计算出该学生的平均成绩
    		if(i==1)max=s1;
    		if(max.average<s1.average)//找出平均分最高的学生
    			max=s1;//将s1里面的成员变量的值分别对应地赋值给max
    	}
    	printf("num:%d, name:%s, average:%.2lf\n",max.num,max.name,max.average);
    	//将平均成绩最高的学生成绩输出
    	return 0;	
    }
    
    • 结构体类型的定义:
      结构体类型实际上是一种模板,它的定义形式为:
    struct 结构体名
    {
    	类型标识符 结构体成员名1;
    	类型标识符 结构体成员名2;
    	...
    	类型标识符 结构体成员名3;
    };//最后的这个分号不要忘了
    

    注意不要忘记最后的分号

    结构体变量的定义

    在结构体类型定义好的情况下,注意是结构体类型定义好的情况下,才能定义结构体变量。
    比如:

    struct student
    {
    	int num;
    	char name[10];
    	int computer,english,math;
    	double average;
    };
    

    这个是结构体类型的定义,然后才能进行结构体变量的定义:

    struct 结构体类型名 结构体变量名;
    
    struct student stu1,stu2;//定义两个结构体变量
    

    也可以在定义结构体类型的时候同时定义结构体变量,如:

    struct student
    {
    	int num;
    	char name[10];
    	int computer,english,math;
    	double average;
    }stu1,stu2;//定义两个结构体变量;
    

    也可以省略结构体类型名,如:

    struct//省去了结构体类型的名字student
    {
    	int num;
    	char name[10];
    	int computer,english,math;
    	double average;
    }stu1,stu2;//定义两个结构体变量;
    

    省略了结构体类型的名字,在这种情况下,结构体变量只能在后面同时定义,而不能在主函数中定义。所以并不建议这样定义结构体变量

    • 注意:结构体变量的变量名和成员名可以相同,二者互不影响,互不干扰,如:
    struct date
    {
    	int year;
    	int month;
    	int day;
    };
    int main()
    {
    	struct date year;
    	year.year = 1980;
    }
    

    结构体变量的使用

    使用形式为:结构体变量.结构体成员名

    scanf("%d%s%d%d%d",&s1.num,s1.name,&s1.math,&s1.english,&s1.computer);
    
    • 注意:如果结构体类型中有字符数组成员,并且在主函数中要给字符数组赋字符串常量时,不能直接用“=”,即s1.name="张三";是错误的,必须使用字符串复制函数strcpy()函数来实现,如:strcpy(s1.name,"张三");
      在这里插入图片描述
      在这里插入图片描述
    • 同一类型的结构体变量间可以赋值
      如:stu2=stu1;将结构体变量stu1里面的所有成员变量的值分别对应赋给结构体变量stu2

    结构体变量作为函数参数

    • 结构体变量的成员作为函数的实参形参为普通变量或数组
    • 也可以将结构体变量作为函数的参数
      例如:(请看代码中的详细注释,并观察运行结果)
    #include <stdio.h>
    #include <string.h>
    struct s_score
    {
    	int no;
    	char name[10];
    	int score[3];
    };//不要忘记这个分号
    void output(struct s_score a);//形参为结构体变量
    void fun(int *q);//形参为指针 
    main()
    {
    	struct s_score a={1001,"zhangsan",{60,60,60}};//这行语句是对结构体变量的初始化
    	output(a);
    	a.no=1001;
    	strcpy(a.name,"wang lin");
    	a.score[0]=78;
    	a.score[1]=88;
    	a.score[2]=94;
    	output(a);
    	fun(a.score);//结构体中的数组成员,数组名为数组首地址 
    	output(a);
    }
    void output(struct s_score a)//将结构体变量作为形参接收来自主函的结构体变量 
    {
    	int i;
    	printf("%d  %s   ",a.no,a.name);
    	for(i=0;i<3;i++)
    		printf("%4d",a.score[i]);
    	printf("\n");
    }
    void fun(int *p)//定义指针变量来接收主函数传入的数组首地址 
    {
    	int i;
    	for(i=0;i<3;i++)
    	{
    		*(p+i)+=10;//通过循环变量i来对指针变量进行运算 
    		if(*(p+i)>100)
    			*(p+i)=100;
    	}
    }
    

    结构体变量的初始化

    结构体变量的初始化一般形式为:
    结构体变量名={初值表};
    就像上面的语句:

    struct s_score a={1001,"zhangsan",{60,60,60}};
    

    结构体初值的数据类型,应与结构体变量中相应成员所要求的一致,否则会出错



    后面的博客还会对结构体进行补充

    下一篇文章

    C语言结构体数组+结构体类型指针+指向结构体数组的指针+typedef类型

    展开全文
  • 首先在a.h中定义结构体和声明结构体变量,如: typedef struct struct_a { //结构体内容 } struct_a; extern struct_a aaa; 然后在a.c中定义结构体变量,如下: #include "a.h" struct_a aaa; 这样,只要在b...

    如果想在a.c中定义一个可以在b.c中可以使用的结构体变量,则可以参照一下方法:

    首先在a.h中定义结构体和声明结构体变量,如:

    typedef struct struct_a
    {
    //结构体内容
    }
    struct_a;
    
    extern struct_a aaa;

    然后在a.c中定义结构体变量,如下:

    #include "a.h"
    
    struct_a aaa;

    这样,只要在b.c中#include "a.h",就可以在b文件中调用和使用结构体变量aaa了

    展开全文
  • 一 结构体和结构体变量的...三 如何声明结构体 1 基本语法 type 结构体名称 struct { field1 type field2 type } 2 举例 type Student struct { Name string // 字段 Age int // 字段 Score float32...
  • 结构体变量声明与赋值

    千次阅读 2005-08-31 10:05:00
    当变量定义与结构体定义本身一起声明时,可不需再次声明结构体变量,如struct structintcll{ char name[20]; int numb; float amt;}xyz; /*此处已将xyz申请为结构体变量,语句中可使用xyz.name等直接访问 *...
  • 有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩) 代码实现#include #define N 3 //学生数为3 struct Student ...
  • 结构体变量

    2019-04-05 12:04:20
    结构体变量 资源引用: https://baijiahao.baidu.com/s?id=1605775898311633565&wfr=spider&for=pc 结构体变量的定义 结构体就是将不同类型的数据组合成一个有机的整体,以便于引用。如定义一个学生的...
  • 结构体变量声明与赋值初始化

    千次阅读 2005-12-19 11:41:00
    当变量定义与结构体定义本身一起声明时,可不需再次声明结构体变量,如struct structintcll{ char name[20]; int numb; float amt;}xyz; /*此处已将xyz申请为结构体变量,语句中可使用xyz.name等直接访问 */初始...
  • 结构体变量声明

    2010-07-31 18:55:27
    如何声明结构体?定义基本数据类型变量的语法形式如下: 数据类型 变量名称;例如,定义整型变量 a,可以写如下的语句:int a;结构体类型变量定义与基本数据类型变量定义类似。但是要求完成结构体定义之后才能使用此...
  • Arduino结构体变量使用

    2021-05-20 10:24:48
    Arduino结构体变量使用 程序源码: /*****本文使用arduino nano********/ //声明 B struct B { char c; short s; double d; }; //声明 Stu struct Stu { //成员变量 struct B sb; char name[20];//名字 int ...
  • 结构体变量的指针

    2014-03-12 22:53:26
    一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。 1. 通过指向...
  • C++结构体数组 一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据...struct Student //声明结构体类型Student { int num; char name[20]; char sex; int age; float score; char addr[30];
  • 结构体的详情参考本文档、 c语言中结构体类型变量类型,结构体变量名赋值 这几天看图用领接表存储图时候,...//同时又声明结构体变量s1 //这个结构体并没有标明其标签 struct { int a; char b; double c; } s1; ...
  • 结构体变量的初始化和赋值

    千次阅读 2015-05-05 14:44:45
    下面是一段结构体变量初始化和赋值的小程序:#include struct Student { int age; float score; char sex; }; int main(void) ... struct Student st1 = {80, 66.0F, 'F'};... //定义声明结构体变量st2,
  • 1 先声明结构体类型、定义结构体变量: //声明结构体类型 struct students { char name[20]; int age; }; //定义并初始化结构体变量 struct students stu1={"Allen",18}; 2 定义并初始化指向结构体变量的指针...
  • 二、结构体变量的定义 ①先定义结构体类型,再定义结构体变量 ②在定义结构体类型的同时,定义结构体变量 ③直接定义结构体变量 三、结构体变量的内存分配 四、结构体变量的初始化 五、结构体变量的引用 一、...
  • 一、结构体的定义格式一般如下: Typedef struct SCI {  U8 data[MAXLEN]; ...1、定义一个结构体变量...2、定义一个结构体指针变量间接访问结构体变量。 (1) 结构体变量访问 TSCI Sci1; Sci1.data 
  • 解题思路:在主函数中声明了struct student类型,然后定义了一个struct student类型的变量s_1,又定义了一个指针变量p,它指向一个struct student类型的对象,将结构体变量s_1的起始地址赋给指针变量p,也就是使p...
  • 一个结构体变量的指针就是该...声明一个结构体变量,无论是否初始化,都开辟内存,声明一个结构体指针变量,对其初始化的时候才会开辟内存。 A a[3]; a是A型的,有3个,当然分配A乘3大小的空间 A* a; a是A*型
  • 结构体变量的初始化

    2012-04-18 13:18:39
    TAG:结构体,结构体变量,结构体变量声明,结构体变量初始化,结构体变量引用,结构体成员变量引用 TEXT:C语言中引用变量的基本原则是在使用变量前,需要对变量进行定义并初始化。其方法是在定义变量的同时给其一初始值...
  • (struct)结构体变量作为函数参数调用的方法小结

    万次阅读 多人点赞 2015-04-29 19:37:38
    结构体变量作为函数参数传递的3种方法 将一个结构体变量中的数据传递给另一个函数,有下列3种方法: 用结构体变量名作参数。一般较少用这种方法。 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。 用...
  • * 程序的版权和版本声明部分:  * Copyright (c) 2012, 烟台大学计算机学院  * All rights reserved.  * 文件名称:指针访问结构体.cpp  * 作 者:毛通  * 完成日期:2013 年 1月 23日  * 版 本 号:v...
  • C语言结构体变量

    2019-07-08 16:06:41
    结构体变量的定义 结构体就是将不同类型的数据组合成一个有机的整体,以便于引用。如定义一个学生的信息: struct student{int num;char name[20];int score;};struct为结构体关键字,student就是这结构体的类型名...
  • 结构体变量声明步骤:一般放在头文件中。 1.typedef struct { uint8_t receive_flag:1;//空闲接收标记 uint8_t dmaSend_flag:1;//发送完成标记 uint16_t rx_len;//接收长度 uint8_t usartDMA_rxBuf[RECEIVELEN];//...
  • 利用结构体类型声明结构体类型的变量。 这个声明有两种形式: 1,在声明结构体类型的时候,顺便声明变量: struct Stu { char name[10]; int age; double high; char num[20]; }stu1,stu2; 声明了两...
  • 关于结构体变量指针

    千次阅读 2016-05-20 15:46:46
    程序中使用结构体类型指针引用结构体变量的成员,需要通过C提供的函数malloc()来为指针分配安全的地址。 最近在结构体上做了个实验: 声明一个结构体类型,如下: typedef struct {  int score;  char *str; }...
  • 结构体变量初始化

    2009-05-19 17:12:00
    转自:http://www.neu.edu.cn/cxsj/pointchart/c9-struct/Untitled(8).htmlTAG:结构体,结构体变量,结构体变量声明,结构体变量初始化,结构体变量引用,结构体成员变量引用TEXT:C语言中引用变量的基本原则是在使用变量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,395
精华内容 43,758
关键字:

如何声明结构体变量