精华内容
下载资源
问答
  • 2018-04-22 17:03:32

        一个指针变量当用来指向一个结构体变量时,称之为结构体指针变量。结构体指针变量中的值是所指向的结构变量的首地址。通过结构指针变量即可访问该结构的变量。


    结构指针变量说明的一般形式如下:

    struct 结构名 *结构指针变量名


        结构名和结构变量时两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不会对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。


        有了结构指针变量,就能更方便地访问结构变量的各个成员。其访问的一般形式为:    

        (*结构指针变量).成员名

        结构体指针变量->成员名    



    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	struct Student
    	{
    		char cName[20];
    		int iNumber;
    		char cSex;
    		int iGrade;
    	}student={"Girl",2017,'w',2};
    	
    	struct Student *pStruct; 
    	pStruct = &student;
    	printf("Name:%s\n",(*pStruct).cName);
    	printf("Number:%d\n",pStruct->iNumber);
    	printf("Sex:%c\n",student.cSex);
    }

    通过上面的代码可见,以下三种用于结构成员的形式是完全等效的。

    结构变量.成员名

    (*结构指针变量).成员名

    结构指针变量->成员名


    更多相关内容
  • 指向结构变量指针: 一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址 结构指针变量说明的一般形式为: struct 结构名 *结构指针变量名 例如:...

    指向结构变量的指针 :

    一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址

    结构指针变量说明的一般形式为:
                 struct 结构名 *结构指针变量名

    例如:struct stu *pstu;

    赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量

    结构名类似类,而结构变量类似对象,结构名和结构变量是两个不同的概念,不能混淆

    例如:如果 boy是被说明为 stu 类型的结构变量,则:pstu=&boy

    有了结构指针变量,就能更方便地访问结构变量的各个成员。
    其访问的一般形式为:
           (*结构指针变量).成员名
    或为:
           结构指针变量->成员名

    例如:pstu->成员名

    struct stu
    {
    int num;
    char *name;
    char sex;
    float score;
    } boy1={102,"Zhang ping",'M',78.5},*pstu;
    main()
    {
    pstu=&boy1;//结构指针变量指向结构变量地址
    printf("Number=%d\nName=%s\n",boy1.num,boy1.name);
    printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);
    printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);
    printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);
    printf("Number=%d\nName=%s\n",pstu->num,pstu->name);
    printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);
    }

    结构变量.成员名
    (*结构指针变量).成员名
    结构指针变量->成员名
    这三种用于表示结构成员的形式是完全等效的。

    指向结构数组的指针:

    指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结
    构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地
    址。

    struct stu
    {
    int num;
    char *name;
    char sex;
    float score;
    }boy[5]={
    {101,"Zhou ping",'M',45},
    {102,"Zhang ping",'M',62.5},
    {103,"Liou fang",'F',92.5},
    {104,"Cheng ling",'F',87},
    {105,"Wang ming",'M',58},
    };
    main()
    {
    struct stu *ps;//定义结构指针变量
    printf("No\tName\t\t\tSex\tScore\t\n");
    for(ps=boy;ps<boy+5;ps++)//结构变量指针指向结构数组首地址
    printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);
    }

    结构指针变量作函数参数:

    struct stu
    {
    int num;
    char *name;
    char sex;
    float score;}boy[5]={
    {101,"Li ping",'M',45},
    {102,"Zhang ping",'M',62.5},
    {103,"He fang",'F',92.5},
    {104,"Cheng ling",'F',87},
    {105,"Wang ming",'M',58},
    };
    main()
    {
    struct stu *ps;//定义结构指针变量
    void ave(struct stu *ps);//定义函数原型
    ps=boy;//结构指针变量指向结构数组首地址
    ave(ps);//结构指针变量作为参数传递
    }
    void ave(struct stu *ps)
    {
    int c=0,i;
    float ave,s=0;
    for(i=0;i<5;i++,ps++)
    {
    s+=ps->score;
    if(ps->score<60) c+=1;
    }
    printf("s=%f\n",s);
    ave=s/5;
    printf("average=%f\ncount=%d\n",ave,c);
    }

    结构变量中的指针应该只用来在程序中管理那些已分配和在别处分配的字符串。如ps->name,该变量指针只是用来管理那些已分配内存的字符串。

    展开全文
  • C++通过指向结构体变量指针引用结构体变量中的成员 C++中,一个结构体变量指针就是该变量所占据的内存段的起始地址,指针变量也可以用来指向结构体数组中的元素。 C++提供了指向结构体变量的运算符->,例如:...

    C++通过指向结构体变量的指针引用结构体变量中的成员

    C++中,一个结构体变量的指针就是该变量所占据的内存段的起始地址,指针变量也可以用来指向结构体数组中的元素。

    C++提供了指向结构体变量的运算符->,例如:

    p->num;//表示指针p当前指向的结构体变量中的成员num

    p->num 和(* p).num 等价,同样,p->namep->name等价于(*p).name。

    在C++中,以下3种形式等价:

    1. 结构体变量.成员名,如stu.num。
    2. (*p).成员名,如( *p).num。
    3. p->成员名,如p->num,->称为指向运算符。
    p->n;//得到p指向的结构体变量中的成员n值。
    p->n++;//得到p指向的结构体变量中的成员n的值,用完该值后使它加1。
    ++p->n;//得到p指向的结构体变量中的成员n的值,并使之加1,然后再使用它。
    
    经典案例:C++指向结构体变量的指针。
    
    #include<iostream>//预处理
    using namespace std;//命名空间 
    int main()//主函数 
    {
      struct Student{ //自定义结构体变量 
        int num;//学号 
        char sex;//性别 
        int age;//年龄 
      };
      Student stu;//定义Student类型的变量stu 
      Student *point=&stu;//定义point为指向Student类型数据的指针变量并指向stu 
      stu.num=1001;//赋值 
      stu.sex='M';//赋值 
      stu.age=21;//赋值 
      cout<<stu.num<<endl;//输出学号 
      cout<<stu.sex<<endl; //输出性别
      cout<<stu.age<<endl; //输出年龄 
      cout<<"--------"<<endl; 
      cout<<(*point).num<<endl;//输出学号
      cout<<(*point).sex<<endl;//输出性别
      cout<<(*point).age<<endl;//输出年龄 
      return 0; //函数返回值为0;
    }
    

    编译运行结果:

    1001
    M
    21
    --------
    1001
    M
    21
    
    --------------------------------
    Process exited after 0.08501 seconds with return value 0
    请按任意键继续. . .
    

    C++指向结构体变量的指针
    更多案例可以go公众号:C语言入门到精通

    展开全文
  • 目录 概念 内存分配 对象的引用 结构体变量和结构体指针作形参的区别 含结构体变量和结构体指针变量形参的函数调用 ...结构体指针变量是指指向结构体变量指针或者指向结构体数组的指针。 Studen

    目录

    概念

    内存分配

    对象的引用

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

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


     

    概念

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

    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;
    }

     

     

     

     

     

    展开全文
  • 结构数组的每一个元素都是具有相同的结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。 如:一个班的学生的档案,一个车间职工的工资等。struct stu { Int num; char *...
  • 主要介绍了C++中的指针结构体数组以及指向结构体变量指针的用法,是C++入门学习中的基础知识,需要的朋友可以参考下
  • 对于指针指针变量指针变量(通常简写成指针指向的一些理解 1.指针的定义: 首先假设有一个内存单元,每一个内存单元对应着一个相应的编号,即为该内存单元的地址,该地址也就是我们所说的指针。 2.指针变量的...
  • 一、指向数组元素的指针变量的定义和赋值 二、通过指针引用数组元素 三、数组名作为函数参数 四、指向多维数组的指针指针变量探究 五、指针数组和数组指针 一、指向数组元素的指针变量的定义和赋值 数组...
  • 前言 如果对结构体变量的使用不太熟悉,可以先看看博主的这篇文章【C语言】结构体变量定义、初始化、使用 ...2 定义并初始化指向结构体变量指针 //定义指向结构体变量指针 struct students *pstu...
  • 指向结构类型变量指针

    千次阅读 2014-11-17 01:10:39
    1指向结构类型变量指针
  • #include<stdio.h> #include<math.h> #include<string.h> struct Student { long num; char name[50]; char sex; float score; }; int main() { struct Student stu_1;...stu_...
  • 指向结构体变量指针

    千次阅读 2013-08-12 12:46:31
    可以设一个指针变量,来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。 设p是指向结构体变量的数组,则可以通过以下的方式,调用指向的那个结构体中的成员: (1)结构体变量.成员名。如,stu....
  • 通过指向结构体变量指针变量输出结构体变量中成员的信息。解:程序:#include#includeint main(){struct Student{long int num;char name[20];char sex[10];float score;};struct Student stu_1;//定义struct ...
  • 怎样通过指向结构体变量指针访问结构体变量中成员。 #include <stdio.h> #include <string.h> struct Student{ long int num; char name[15]; char sex; float score; }; int main()...
  • 如果我们想通过指向结构体变量指针引用结构体变量中的成员,可采取三种方式: 1.结果变量名.成员名 2.(*指针名).成员名 3.指针名->成员名 举例:有一个结构体student,结构体变量stu,结构体指针p, ...
  • 当一个指针变量指向结构体时,我们就称它为结构体指针。C语言结构体指针的定义形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: //结构体 struct stu{ char *name; //姓名 int ...
  • 指针访问类中静态变量指针访问类成员方法1. 指针访问类中普通方法2. 指针访问类中静态方法 我们都知道在 C/C++ 中指针的使用的方式非常灵活,在C语言中指针可以指向任意的变量或是函数,并通过指针解引用的方式对...
  • 指针就是指向变量的地址 在这里插入代码片 指针常量 int * const p =&a; 特点:指针指向不可以修改,指针指向的内存的值可以修改 举例: *p = 20; p=&b; 常量指针 int a = 10; int b = 10; const int *p...
  • 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...
  • 指向结构变量指针

    2013-05-14 15:04:29
    指向结构变量指针 一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。 结构...
  • 结构体指针和结构体变量

    千次阅读 2020-12-26 16:17:58
    文章目录1.前言2.内存空间上面的差别3.访问上的差别 ...结构体指针p是指向一个结构体的,这个结构体没有名字,它指向的是一个结构体空间的首地址;如果需要使用这个结构体就必须malloc一个空间出来或者将一个
  • 在类中声明一个指针变量,并创建一个内部函数改变该指针变量的值。 (1).h文件 void readSettings(); QSettings *DialSettings; (2).cpp文件 void MainWindow::readSettings() { QSettings BasicSettings...
  • 指向结构体的指针&结构体成员指针

    万次阅读 2018-08-17 18:44:11
    指向一个结构体的指针变量,其值是结构体变量的起始地址。 /* *copyright(c) 2018,HH *All rights reserved. *作 者:HH *完成日期:2018年8月17日 *版本号:v1.0 * *问题描述:指向结构体变量指针的应用 *输入...
  • 相信大家都知道这样一个学习指针的观点:要想彻底理解 C 语言中的指针,首先一定要理解 C 语言中变量的存储实质。谈到变量的存储,我们就不得不先说说计算机的内存概念。计算机的内存是一个用于存储数据的空间,由一...
  • 指向结构体类型的指针

    千次阅读 2021-02-01 15:28:20
    可以定义一个指针变量指向一个结构体变量,也可以动态分配内存存放结构体各成员数据。 与指向普通数据类型的指针变量相同,也可以定义指向结构体数据类型的指针变量。 代码示例: #include<stdio.h> #...
  • 只要是指针,要使用它前就必须保证指针变量的值是一个有效的值 ;否则,它指向的内存一定是垃圾数据!  C语言指针一般在什么时候需要申请内存空间 C语言的内存管理很重要,集魄力和麻烦于一身,看你自己的心态如何...
  • 数据结构指针指向问题

    千次阅读 多人点赞 2020-04-06 21:20:05
    数据结构单链表指针指向基础问题 L在数据结构中一般是作为链表头节点的指针,p=L,将P指针指向头节点。 L->next有两层含义,可以表示L的后继节点指针,又可表示L的指针域,(补充:链表每个节点分为数据域和...
  • 结构体指针变量的定义

    千次阅读 2020-04-07 17:57:34
    最近在STM的GPIO结构体定义中看到源代码的时候,顺便复习下结构体指针变量的定义及typedef 的使用。 1.结构体类型定义 定义方式1: Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 351,598
精华内容 140,639
关键字:

指向结构变量的指针

友情链接: 19001D4308.zip