精华内容
下载资源
问答
  • 结构体指针变量的引用
    千次阅读 多人点赞
    2019-06-23 13:11:44

    学了结构体很久了,以为自己能够很熟练了,今天发现自己今天成员运算符 (.) 和指向运算符(->) 之间竟然犹豫了
    其实成员运算符是结构体变量访问成员是用的。而指向运算符则是结构体指针访问成员时使用的,因为一直都是再用结构体指针,突然用结构体变量,使用了指向运算符,看了半天才看出来,当然结构体指针也可以使用成员运算符但需要先取值,但一般没人这么用,

    我一直是这样认为 你对基础的掌握程度,决定着你能走多远

    与结构体一起出现的一般还有动态内存分配(堆里开辟内存),需要我们注意的是作用域,和传值传地址
    举个例子
    struct node s;
    s.name // 结构变量访问成员的方式
    s->name //这样是错误的
    struct node * p;
    p->name // 结构体指针访问结构体成员的方式
    (*p).name // 当然这样也可以 一般人不这样用

    更多相关内容
  • 由于经常要在函数中对结构体对象进行操作,所以函数形参中常常都是传值一个结构体指针变量,自己有时为了偷懒,干脆在定义对象时直接定义结构体指针变量,这样实参就不用取地址了。 这样想是没有错,但是结构体指针...
    1. 由于经常要在函数中对结构体对象进行操作,所以函数形参中常常都是传值一个结构体指针变量,自己有时为了偷懒,干脆在定义对象时直接定义结构体指针变量,这样实参就不用取地址了。
    2. 这样想是没有错,但是结构体指针变量的本质还是一个指针,只要是指针,使用它前就必须要对其初始化,否则它指向的内存一定是垃圾数据,而对其初始化只能是用其他结构体对象取地址或者是malloc申请堆空间,甚至不能用NULL为其初始化(指针会访问不到成员)。
    3. 结构体变量定义的就直接是结构体,而结构体指针变量定义的是指针,必须把它和结构体联系起来才能当作结构体用,方式就是用malloc申请空间或者赋值其他对象地址,让其指向结构体。
    4. 上述问题实际上就是c++中“两种创建对象方式的区别(类名创建和new创建)”的问题,二者是完全等价的,定义指针变量的同时申请堆空间,一定要把二者划等号!!!
    5. 注意如果是给结构体指针变量malloc来初始化,则一定要让“声明该变量”和“为其malloc堆空间”在同一作用域内,比如不可先在main中声明然后传值进函数后在函数中malloc,这样malloc的是该指针变量的副本,指针变量本身并没有指向结构体,仍是野指针;可以将声明和malloc都放在函数中然后再传值出来,也可以在main中声明传引用进函数malloc,或者malloc后传值进函数。(如果是通过赋值已有结构体地址的方式初始化指针变量,则也要让声明和赋值在一起。即:一般来讲,指针传入另一个函数后,只能对指针指向的空间进行操作,而不能修改指针的值,且指针的值在传入前就要设置好)
    6. 在定义结构体变量或者malloc结构体指针变量后,只是相当于将变量和结构体联系起来了而已,并没有为结构体初始化。初始化可以分别对各成员初始化也可以直接用其他对象为其赋值(结构体指针如果是赋值已有结构体地址就不用malloc了),结构体若没初始化完全常常会带来一些问题。
    展开全文
  • C语言学习笔记之结构体指针变量一提指针,那可是C语言的核心了,有多少学子曾拜倒在指针的脚下。单纯的说指针,其实并不难,但是与其它的结构搭配在一起,那可就愁死人了。比如说:数组一点都不难,但是与指针一起用...

    C语言学习笔记

    之结构体指针变量

    一提指针,那可是C语言的核心了,有多少学子曾拜倒在指针的脚下。单纯的说指针,其实并不难,但是与其它的结构搭配在一起,那可就愁死人了。比如说:数组一点都不难,但是与指针一起用,可就经常麻烦了。结构体也是一种结构,它与指针搭配怎么样呢? 一起来看一下吧!

    1:结构体指针变量

    和指针指向数组首地址一样,指针也可以指向结构体的起始地址。

    形式形如:  struct  student  *p;

    上述语句定义了一个指针变量p,它指向任何一个属于struct student类型的数据。通过指针去访问所指结构体变量的某个成员时,有两种方法:

    (*p).score或者p->score(这是一种常用的方式。->是指向运算符)

    比如:

    c76cddfea6aa4f5b1388a4bd650452b0.png

    访问的时候:(*p).num=11031,或者p->num=11031。

    2.程序实例

    #include

    /*定义结构体*/

    struct student

    {

    int num;

    char name[20];

    char sex;

    int age;

    float score;

    };

    /*初始化一个结构体实例*/

    struct student stu[3]={

    {11302,"Wang",'F',20,486.69},

    {11303,"Zhao",'F',25,466.59},

    {11304,"Xue",'M',26,483.59}

    };

    main()

    {

    /*初始化一个student1的实例*/

    struct student student1={11305,"Li",'F',19,59.59};

    struct student *p,*q;//定义struct student类型的指针

    int i;

    p=&student1;//将student 1的结构体的首地址赋给p,也就是p指向了student 1的首地址

    /*输出:可以看到,访问结构体的成员,有三种方法*/

    printf("%s,%c,%f\n",student1.name,(*p).sex,p->score);

    q=stu;//将数组stu的首地址赋给q;

    /*for循环输出数组中的成员*/

    for(i=0;i<3;i++,q++)

    {

    printf("%s,%c,%f\n",q->name,(*q).sex,stu[i].score);

    }

    }

    44c6d52bc88ccb32f0739a9e761b1539.png

    3.指针符号->)P->numP指向的结构体中的成员

    P->num++先得到p所指向的结构体成员num,然后使该num的值加1

    ++p->num先p所指向成员num的值加1,然后引用这个新的值

    (p++)->num先引用p->num的值,用完之后再使p加1

    (++p)->num先p加1,然后引用p->num的值

    4.结构体变量和结构体指针变量做函数参数

    结构体变量以及结构体指针变量均可以像int类型那样作为函数的参数。#include

    /*定义结构体*/

    struct student

    {

    int num;

    char name[20];

    char sex;

    int age;

    float score;

    };

    /*初始化一个结构体实例*/

    struct student stu[3]={

    {11302,"Wang",'F',20,486.69},

    {11303,"Zhao",'F',25,466.59},

    {11304,"Xue",'M',18,483.59}

    };

    /*输出函数,结构体变量s做为函数参数*/

    void print(struct student s)

    {

    printf("%s,%d,%f\n",s.name,s.age,s.score);

    }

    /*增加成绩的函数,结构体指针q作为函数参数*/

    void add(struct student *q)

    {

    if(q->age<=19)

    q->score=q->score+10;

    }

    main()

    {

    struct student *p;

    int i;

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

    {

    print(stu[i]);//stu[i]作为形参

    }

    for(i=0,p=stu;i<3;i++,p++)

    {

    add(p);//指向stu的指针变量p作为形参

    }

    printf("\n");

    for(i=0,p=stu;i<3;i++,p++)

    {

    print(*p);//*p作为形参,相当于stu[i]

    }

    }

    4a80f2d57120007e8a4833d2ea13670c.png

    上述程序注意的是:调用函数print和add都是void无返回值类型的函数,如果是有返回值的,它的类型应该是struct student类型,也就是说应该是语言struct student add(struct student *q)

    {

    if(q->age<=19)

    q->score=q->score+10;

    return *q

    }

    本文出自 “赵玉强的博客” 博客,请务必保留此出处http://zhaoyuqiang.blog.51cto.com/6328846/1292014

    http://www.dengb.com/Cyy/617171.htmlwww.dengb.comtruehttp://www.dengb.com/Cyy/617171.htmlTechArticleC 语言学习笔记 之 结构体指针变量 一提指针,那可是 C 语言的核心了,有多少学子曾拜倒在指针的脚下。单纯的说指针,其实并不难,但...

    展开全文
  • 含结构体变量和结构体指针变量形参的函数调用 指针和数组作为函数形参的区别 概念 结构体变量是指将不同的数据类型整合成一个有机的整体,以便于调用。 struct Student { int num; char name[20]; int score...

    目录

    概念

    内存分配

    对象的引用

    结构体变量和结构体指针变量作形参的区别

    以结构体变量和结构体指针变量形参的函数调用


     

    概念

    结构体变量是指将不同的数据类型整合成一个有机的整体,以便于调用。

    struct Student
    {
        int num;
        char name[20];
        int score;
    }
    
    Student stud1;//stud1就是结构体变量

    结构体指针变量是指指向结构体变量的指针或者指向结构体数组的指针。

    Student *stud2;//结构体指针变量

    内存分配

    在C语言中都是使用库函数malloc和free来分配和撤销内存空间的。C++中提供了较简便而功能较强的运算符new和delete来取代函数malloc和free函数。注意:new和delete是运算符,不是函数。

    int main
    {
        Student *p
        p = new Student    //用new运算符开辟一个存放Student型数据的空间
        .
        .
        .
        delete p;         //使用完之后一定要撤销该空间
        
        return 0;
        
    }

    对象的引用

    结构体变量引用成员变量的方式是:

    结构体变量名.成员变量名

    指针引用结构体变量成员的方式是:

    (*指针变量名).成员变量名 //*指针变量名 两边的括号不可以省略
    
    指针变量名->成员名    //->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。

    结构体变量和结构体指针变量作形参的区别

    结构体变量作为函数形参。此时sc_para和tm_para传递的是两个结构体变量,包含其内部所有的成员变量,占用的内存空间自然而然就大,具体大小取决于结构体变量的大小。

    int REF_STRUCT_PARAM(
                SC_PARAMS sc_para,
                TM_PARAMS tm_para
                )    //SC_PARAMS和TM_PARAMS是两个结构体类型

    结构体指针变量作为函数形参。此时*sc_para和*tm_para传递的是两个指针变量,一个指针只占用四个字节空间,而且存储的是结构体变量的首地址。修改为指针后速度变快,占的内存空间也减小。

    int REF_POINTER_PARAM(
                SC_PARAMS* sc_para,
                TM_PARAMS* tm_para
                )    //SC_PARAMS和TM_PARAMS是两个结构体类型

    以结构体变量和结构体指针变量形参的函数调用

    以结构体变量作形参的函数的调用,函数形参部分直接调用定义的结构体名即可。

    int main
    {
    
        SC_PARAMS sc_para;
        TM_PARAMS tm_para;
    
    
        int REF_STRUCT_PARAM(sc_para, tm_para);  //SC_PARAMS和TM_PARAMS是两个结构体类型
    
        return 0;
    }

    以结构体指针变量作形参的函数的调用,函数形参位置要引用结构体地址。

    
    int main
    {
    
        SC_PARAMS* sc_para;
        TM_PARAMS* tm_para;
    
    
        int REF_POINTER_PARAM(&sc_para, &tm_para);  //SC_PARAMS和TM_PARAMS是两个结构体类型
    
        return 0;
    }

     

     

     

     

     

    展开全文
  • 只有“指针变量名”后面才能加“->”,用指针取出结构体中的数据,就要用到“->”,千万不要在成员名如 birthday 后面加“->”。 有以下 3 种形式,且是等价的: 结构体变量.成员名。 (*指针变量).成员名。 ...
  • (2)(*结构体指针).成员名 //利用指针运算符"*"和成员运算符"."访问 //演示2 (3)结构体指针->成员名 //利用指针和指向运算符"->"访问 //演示2 2.引用整个结构体变量 相同类型的结构体变量...
  • 结构体成员变量引用

    千次阅读 2020-11-25 09:18:33
    如果把一个结构体变量的起始地址存放在一个指针变量中,那么这个指针变量就是指向该结构体的变量。 为了使用方便和直观,C语言允许把(*p).num用p->num来代替,“->”代表一个箭头,p->num表示p所指向的...
  • 一、首先我们来了解关于结构体以及结构体数组的概念。自定义结构体:struct weapon{char name[20];int atk;int price;};它是"weapon"型(类似于我们熟知的int型,String型等),里面有一个char类型,两个int类型。如何...
  • 假设我们定义了一个结构体
  • 结合”指针变量、普通变量、内存和地址的全面对比“这篇文章阅读本篇文章~~
  • 结构体中的结构体指针是使用一、问题背景二、代码三、说明 一、问题背景   日常工作中没有编程的机会,所以只看得懂代码,现在需要重新写一段代码,实现固定格式存储数据,需要使用到结构体和结构体指针。数据...
  • 引用形式为:指针变量→成员;[例7-2] 对指向结构体类型变量的正确使用。输入一个结构体类型变量的成员,并输出。 代码如下:#include <stdlib> /*使用m a l l o c ( ) 需要* /struct data / *定义结构体* /{int day,...
  • C语言结构体与结构体指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识 c语言结构体(struct)是由一系列具有相同类型或不同类型的数据...
  • #include #include using namespace std; typedef struct Student { int ID; string name; double score; } stu; stu s[100]; void calculate(stu p[],int n,double &aver,int &number) ...fo...
  • C语言给结构体指针赋值

    千次阅读 2021-05-21 07:53:44
    《C语言给结构体指针赋值》由会员分享,可在线阅读,更多相关《C语言给结构体指针赋值(6页珍藏版)》请在人人文库网上搜索。1、指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。...
  • 结构体指针变量引入 01——概念引入 回忆: 指针就是地址! 指针变量就是存放地址的变量! 结构体也是变量! 变量访问有两种方式:1.变量名直接访问2.地址间接访问! 之前案例,是用变量名直接访问的。 通过结构体...
  • 一个结构体变量的指针就是该...声明一个结构体变量,无论是否初始化,都开辟内存,声明一个结构体指针变量,对其初始化的时候才会开辟内存。 A a[3]; a是A型的,有3个,当然分配A乘3大小的空间 A* a; a是A*型
  • 今天写代码时突然遇到了这个问题,以前不曾探讨过多层嵌套结构体指针变量的访问,只知道结构体指针变量要访问其元素时应该用 -&gt; 来访问,但对于结构体中嵌套有结构体的时候呢? 请看下面代码: #include ...
  • C语言结构体变量 指针以及对结构体成员的访问

    千次阅读 多人点赞 2019-10-12 12:21:26
    文章目录结构体结构体变量访问成员的方法结构体指针变量访问成员的方法 结构体 struct AGE { int year; int month; int day; }; struct STUDENT { char name[20]; //姓名 int num; //学号 struct AGE birthday...
  • 通过指向结构体变量的指针引用结构体变量中的成员下面通过一个简单例子来说明指向结构体变量的指针变量的应用。【例7.3】指向结构体变量的指针的应用。#include #include using namespace st...
  • 结构体指针引用结构体成员

    千次阅读 2020-04-04 22:24:49
    设计一个结构体,存储某个学生的主要学籍信息,包括姓名,性别,班级和学号等,使用结构体实现对结构体变量成员的输入和输出 #include<stdio.h> struct si { char name[30]; char sex[10]; unsigned int ...
  • 如果定义一个指针变量 p 指向这个地址的话,p 就可以指向结构体变量 student1 中的任意一个成员。 那么,这个指针变量定义成什么类型呢?只能定义成结构体类型,且指向什么结构体类型的结构体变量,就要定义成什么样...
  • 问题遇到的现象 已知 struct node{ int len; char *pk; }x={2,"right"},*p=&x; 问不符合C语言语法 A.p->pk B *p.pk C .p->pk Dx.pk 一眼看ac有点像可能... 但是放在编译器中B选项报错 pk不是结构体或者联合体; 望解答
  • 结构体引用结构体成员变量

    千次阅读 2020-11-05 17:02:01
    2、由指向结构体的指针变量引用结构体成员 指针变量名 -> 成员名 3、(*指针变量名).成员名 结构体指针:指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。如果把一个结构体变量的起始...
  • 当一个指针变量用来指向一个结构体变量时,称之为结构体指针变量结构体指针变量的值是所指向的结构体变量的起始地址。通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的。 结构体指针...
  • 结构体指针,C语言结构体指针详解

    千次阅读 2021-05-21 10:21:56
    结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针。指向结构体变量的指针前面我们通过“结构体变量名.成员名”的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针。前面讲过,&...
  • 定义结构体 文件1 <GlobalVar1.h> /******************************* * file: GlobalVar1.h * author: hehl * time: 2019/11/5 *******************************/ #ifndef __GLOBALVAR1_H__ #define __...
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    c语言中交换两个结构体的值(结构体指针) 1关于语言的结构体: 首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 74,854
精华内容 29,941
热门标签
关键字:

结构体指针变量的引用