精华内容
下载资源
问答
  • C语言结构体与结构体指针的使用

    千次阅读 多人点赞 2020-08-08 22:29:02
    c语言结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。说的通俗一点就是一个集合。c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,...

    C语言结构体与结构体指针的使用

    tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识

    c语言结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。说的通俗一点就是一个集合。c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构体指针的知识。


    一、结构体变量的定义和初始化

    1、首先我们来看一下结构体的定义

    	struct 结构体名
    	{
    		成员列表;
    	};//不要漏掉这里的分号!
    
    //结构体的定义
    struct student
    {
    	int num;
    	char name[20];
    	char sex;
    };
    

    在这里我们要区别一下结构体名和变量名,结构体名是一种类型,不能被当成变量名来使用

    变量名声明方法:
    1)struct 结构体名 结构体变量名;
    2)直接在定义结构体的时候添加变量名的声明

    //在main()中定义及初始化
    struct student st1 = {1001,"wr",'m'};
    
    //结构体的定义以及初始化
    struct student
    {
    	int num;
    	char name[20];
    	char sex;
    }st2 = { 1002,"wr",'m' };
    
    //用scanf()方法对结构体变量初始化
    struct student st3;
    scanf("%d %s %c",&st3.num,st3.name,&st3.sex);//对于数组,scanf输入的时候不用"&"
    

    结构的变量的访问(输出)

    printf("%d,%s,%c\n", st1.num, st1.name, st1.sex);
    

    2.结构体数组的定义及初始化

    	struct student sarr[3];//定义结构体数组
    	//循环初始化
    	for (int i = 0; i < 3; i++)
    	{
    		scanf("%d %s %c",&sarr[i].num,sarr[i].name,&sarr[i].sex);
    	}
    	//测试输出
    	for (int i = 0; i < 3; i++)
    	{
    		printf("%d,%s,%c\n", sarr[i].num,sarr[i].name,sarr[i].sex);
    	}
    

    二、结构体指针的使用

    1.结构体指针的定义方法
    1)struct 结构体名 *指针;
    2)直接在定义结构体的时候添加结构体指针的声明

    //在main()方法中定义
    struct student *p1;//定义结构体指针
    
    struct student
    {
    	int num;
    	char name[20];
    	char sex;
    }*p2;
    

    2.利用结构体指针的访问结构体变量(输出)

    结构体指针的访问变量方法
    1)p->结构体成员;
    2)(*p).结构体成员;

    //指针访问
    struct student *p;//定义结构体指针
    p=&st1;
    printf("%d %s %c\n",p->num,p->name,p->sex);
    
    //指针访问
    struct student *p;//定义结构体指针
    p=&st1;
    printf("%d %s %c\n", (*p).num, (*p).name, (*p).sex);
    

    看了上面的基础知识是不是觉得比较简单:),下面让我们来分析一下两个特殊的结构体指针访问方法:)
    1)p->num++
    2)p++ ->num
    来看下面的例子
    大家可以先不看注释,猜一下输出的结果:)

    #include <stdio.h>
    #include <stdlib.h>
    //定义结构体
    struct student
    {
    	int num;
    	char name[20];
    	char sex;
    };
    
    int main()
    {
    	//定义结构体数组
    	struct student sarr[3] = { 1001,"wr1",'m',1003,"wr2",'m',1005,"wr3",'m' };
    	struct student *p;//定义结构体指针
    	
    	p = sarr;//数组本身就是地址,不用取地址
    	int num;
    	num = p->num++;//num=p->num;p->num=p->num+1,优先级->的优先级高于++
    	printf("num=%d,p->num=%d\n",num,p->num);
    
    	//p->num上一步已经加一
    	num = p++->num;//num=p->num,p=p+1
    	printf("num=%d,p->num=%d\n", num, p->num);
    
    	return 0;
    }
    

    下面来看看输出的结果
    看看你猜对了嘛。。。
    在这里插入图片描述


    附:c语言常见运算符优先级

    优先级 运算符 含义 结合方向
    1 [] 数组下标 从左向右
    () 圆括号
    . 成员选择(对象)
    -> 成员选择(指针)
    2 - 负号 从右向左
    ~ 按位取反
    ++ 自增
    -- 自减
    * 取值
    & 取地址
    ! 逻辑非
    sizeof 数据类型长度
    (类型)强制类型转换 强制类型转换
    3 / 从左向右
    *
    % 取模
    4 + 从左向右
    -
    5 << 左移 从左向右
    >> 右移
    6 > 大于 从左向右
    >= 大于等于
    < 小于
    <= 小于等于
    7 == 等于 从左向右
    != 不等于

    希望大家看了能够有所收获,加油!
    tips:每一日你所付出的代价都比前一日高,因为你的生命又消短了一天,所以每一日你都要更积极。今天太宝贵,不应该为酸苦的忧虑和辛涩的悔恨所销蚀,抬起下巴,抓住今天,它不再回来。
    展开全文
  • C语言结构体

    2018-05-17 15:46:38
    什么是结构体?在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、...结构体的定义:C语言结构体类型的定义模板大概为:struct 类型名{ ...

    什么是结构体?

    在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

    结构体的定义:

    C语言结构体类型的定义模板大概为:

    struct 类型名{
        成员表列
    } 变量;
    • 在成员表列中可以是几种基本数据类型,也可以是结构体类型。
    • struct 类型名{} 变量;后的分号不能漏

    下面给出定义结构体类型的几种方法

    1. 先定义结构体类型,再定义结构体变量。

    struct student{
        char no[20];       //学号
        char name[20];    //姓名
          char sex[5];    //性别
        int age;          //年龄
    };             
    struct student stu1,stu2;
    //此时stu1,stu2为student结构体变量

    2. 定义结构体类型的同时定义结构体变量。

    struct student{
        char no[20];        //学号
        char name[20];     //姓名
          char sex[5];      //性别
        int age;            //年龄
    } stu1,stu2;      

    此时还可以继续定义student结构体变量如:
    struct student stu3;

    3.直接定义结构体变量。

    struct{
        char no[20];        //学号
        char name[20];      //姓名
          char sex[5];      //性别
        int age;          //年龄
    } stu1,stu2;      

    一般不会使用第三种定义方法,因为直接定义结构体变量stu1,stu2后就不能再继续定义该类型的变量。

    注意:

    1. 在C语言中使用struct定义结构体类型后定义结构体变量时struct不能省略,在C++中允许省略struct。

      在c中:
      struct student{
      ...
      };
      struct student stu1;    //struct不可省略
      在c++中:
      struct student{
      ...
      };
      student stu1;    //struct可省略
    2. 在C中定义结构体类型后每次定义变量时都要使用struct,如果嫌麻烦,我们可以这样:

      typedef struct student{
      ...
      }STUDENT;
      STUDENT stu1;
      使用typedef给struct student取一个"别名"STUDENT
    3. 在某些情况下还可以使用#define来实现更简化的结构体定义与变量的定义,但可能会牺牲部分可读性。

      #define STUDENT struct student
      STUDENT{
      ...
      };
      STUDENT stu1;

      typedef和#define用法不同,甚至可以结合起来灵活使用,使用时一定要注意两者的不同之处。

    展开全文
  • c语言结构体

    2018-06-05 15:36:12
    c语言结构体 由若干个“成员”组成的,其中每一个成员可以是一个基本数据类型或者一个基本构造类型;结构体也可以作为函数的形参,形参的格式 为:struct 结构体 结构体变量 如 display函数中的形参 struct ...

    c语言结构体由若干个“成员”组成的,其中每一个成员可以是一个基本数据类型或者一个构造类型;

    结构体也可以作为函数的形参,形参的格式 为:struct 结构体名 结构体变量名  如 display函数中的形参 struct product pro;

    其中 product 为结构体名,pro为结构体变量名(形参)

    这种也是值传递的方式;

    本来想用 malloc 给结构体成员 动态分配内存大小,但是main函数中调用成员时,显示没有此成员。

    #include <stdio.h>
    #include <stdlib.h>
    struct product
    {
    	char cName[10];
    	char cShape[20];
    	char cColor[10];
    	int iPrice;
    	char cArear[20];
    };
    
    void display(struct product pro)
    {
            printf("product's name:%s\n",pro.cName);
            printf("product's shape:%s\n",pro.cShape);
            printf("product's color:%s\n",pro.cColor);
            printf("product's price:%d\n",pro.iPrice);
            printf("product's arear:%s\n",pro.cArear);
            printf("%d",sizeof(pro));
    }
    int main()
    {
    	struct product product1;
            printf("please enter  name\n");
            scanf("%s",&product1.cName);
            printf("please enter  shape\n");
            scanf("%s",&product1.cShape);
            printf("please enter  color\n");
            scanf("%s",&product1.cColor);
            printf("please enter product's price\n");
            scanf("%d",&product1.iPrice);
            printf("pleanse enter arear\n");
            scanf("%s",&product1.cArear);
            display(product1);
    	return 0;
    }
    

    展开全文
  • 指向结构体类型数组的指针的使用定义一个结构体类型数组,其数组是数组的首地址,下面是关于指向结构体类型数组的指针的使用具体介绍,欢迎阅读!定义结构体类型的指针,既可以指向数组的元素,也可以指向数组,在...

    指向结构体类型数组的指针的使用

    定义一个结构体类型数组,其数组名是数组的首地址,下面是关于指向结构体类型数组的指针的使用具体介绍,欢迎阅读!

    定义结构体类型的指针,既可以指向数组的元素,也可以指向数组,在使用时要加以区分。

    [例7-3] 在例7 - 2中定义了结构体类型,根据此类型再定义结构体数组及指向结构体类型的指针。

    struct data

    {

    intday,month,year;

    };

    struct stu/*定义结构体*/

    {

    char name[20];

    long num;

    struct data birthday;/嵌*套的结构体类型成员*/

    };

    struct stustudent[4],*p;定/*义结构体数组及指向结构体类型的指针*/

    作p=student,此时指针p就指向了结构体数组student。

    p是指向一维结构体数组的指针,对数组元素的引用可采用三种方法。

    1)地址法

    student+i和p+i均表示数组第i个元素的地址,数组元素各成员的引用形式为:

    (student+i)->name、(student+i)->num和(p+i)->name、(p+i)->num等。student+i和p+i

    与&student[i]意义相同。

    2)指针法

    若p指向数组的某一个元素,则p++就指向其后续元素。

    3)指针的数组表示法

    若p=student,我们说指针p指向数组student,p[i]表示数组的第i个元素,其效果与

    student[i]等同。对数组成员的.引用描述为:p[i].name、p[i].num等。

    [例7-4]指向结构体数组的指针变量的使用。

    structdata/*定义结构体类型*/

    {

    intday,month,year;

    };

    structstu/*定义结构体类型*/

    {

    char name[20];

    long num;

    struct data birthday;

    };

    main()

    {inti;

    structstu*p,student[4]={{"liying",1,1978,5,23},{"wangping",2,1979,3,14},

    {"libo",3,1980,5,6},{"xuyan",4,1980,4,21}};

    /*定义结构体数组并初始化*/

    p=student;/*将数组的首地址赋值给指针p,p指向了一维数组student*/

    printf("\n1----Outputname,number,year,month,day\n");

    for(i=0;i<4;i++)/*采用指针法输出数组元素的各成员*/

    printf("%20s%10ld%10d//%d//%d\n",(p+i)->name,(p+i)->num,

    (p+i)->birthday.year,(p+i)->birthday.month,

    (p+i)->birthday.day);

    }

    展开全文
  • struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子: ...
  • 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量...C语言结构体类型的定义模板大概为: struct 类型名{ 成员表列 } 变量;
  • c语言结构体类型变量类型,结构体变量赋值 这几天看图用领接表存储图时候,开始实现的时候发现对结构体的变量赋值有些疑惑,疑惑的地方查了下,留做备份 //此声明声明了拥有3个成员的结构体,分别为整型的a,...
  • 在描述一个物体的属性的时候,单一的变量类型是无法完全描述完全的。所以有了灵活的结构体...1.1 结构体类型变量的定义 struct 结构体{ 结构体成员; }; ​ struct student{ unsigned int id; ...
  • C语言结构体和结构体排序

    千次阅读 多人点赞 2019-01-26 22:06:48
    (构造数据类型包括:数组类型、结构体类型、共用体类型) 定义:把不同的数据组合成一个整体。 结构体的一般形式 struct [结构体名称]//struct是关键字 { 类型标识符 成员;//成员类型可以是基本型或构造性 ...
  • C语言 结构体 共用体

    2020-09-22 19:21:37
    C语言 结构体 结构体 结构体 1、结构体定义 a、 struct 结构体名称{ 成员列表; }; struct 结构体名称 结构体变量; b、 struct 结构体名称{ 成员列表; }变量,变量、、、; c、 struct { 成员列表; }变量...
  • C语言 结构体

    2021-05-15 15:23:09
    结构体本质上就是一种"自定制类型" #include<stdio.h> //struct 就是一个关键字 //Student 这是结构体的名字(自己创建的类型的名字) struct Student{ //{ }里面放置结构体的"成员" int id; char name[1024...
  • C语言结构体定义的几种方法

    万次阅读 多人点赞 2018-03-08 17:35:18
    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针...结构体的定义:C语言结构体类型的定义模板大概为:struct 类型名{
  • C语言结构体总结

    2020-02-09 12:42:07
    结构体类型的定义 struct 结构体 { 结构体成员表;(变量、指针、数组、结构体、共用体) }; 上面是定义的结构体类型,可以说是一个基础。 在定义结构体类型时,系统并不为结构体类型分配内存空间,只有当定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,610
精华内容 644
关键字:

c语言结构体类型名

c语言 订阅