精华内容
下载资源
问答
  • 主要介绍了C语言中结构体偏移及结构体成员变量访问方式的问题讨论,帮助大家理解struct的成员变量偏移,需要的朋友可以参考下
  • 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...

    结构体

    struct AGE
    {
        int year;
        int month;
        int day;
    };
    struct STUDENT
    {
        char name[20];  //姓名
        int num;  //学号
        struct AGE birthday;  //生日
        float score;  //分数
    };
    

    结构体变量访问成员的方法

    int main(void)
    {
        struct STUDENT student1; /*用struct STUDENT结构体类型定义结构体变量student1*/
    
        student1.birthday.year = 1989;
        student1.birthday.month = 3;
        student1.birthday.day = 29;
        student1.num = 1207041;
        student1.score = 100;
    
        return 0;
    }
    

    访问方式:

    结构体变量.成员名

    结构体指针变量访问成员的方法

    int main(void)
    {
        struct STUDENT student1; /*用struct STUDENT结构体类型定义结构体变量student1*/
        struct STUDENT *p = NULL;  /*定义一个指向struct STUDENT结构体类型的指针变量p*/
        p = &student1;  /*p指向结构体变量student1的首地址, 即第一个成员的地址*/
        strcpy((*p).name, "小明");  //(*p).name等价于student1.name
        (*p).birthday.year = 1989;
        (*p).birthday.month = 3;
        (*p).birthday.day = 29;
        (*p).num = 1207041;
        (*p).score = 100;
        printf("name : %s\n", (*p).name);  //(*p).name不能写成p
        printf("birthday : %d-%d-%d\n", (*p).birthday.year, (*p).birthday.month, (*p).birthday.day);
        printf("num : %d\n", (*p).num);
        printf("score : %.1f\n", (*p).score);
        return 0;
    }
    

    我们看到,用指针引用结构体变量成员的方式是:

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

    括号使用是因为优先级问题。

    此外为了使用的方便和直观,用指针引用结构体变量成员的方式:

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

    可以直接用:

    指针变量名->成员名

    来代替,它们是等价的。->是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。p->num 的含义是:指针变量 p 所指向的结构体变量中的 num 成员。p->num 最终代表的就是 num 这个成员中的内容。

    int main(void)
    {
        struct STUDENT student1; /*用struct STUDENT结构体类型定义结构体变量student1*/
        struct STUDENT *p = NULL;  /*定义struct STUDENT结构体类型的指针变量p*/
        p = &student1;  /*p指向结构体变量student1的首地址, 即第一项的地址*/
        strcpy(p->name, "小明");
        p->birthday.year = 1989;
        p->birthday.month = 3;
        p->birthday.day = 29;
        p->num = 1207041;
        p->score = 100;
        printf("name : %s\n", p->name);  //p->name不能写成p
        printf("birthday : %d-%d-%d\n", p->birthday.year, p->birthday.month, p->birthday.day);
        printf("num : %d\n", p->num);
        printf("score : %.1f\n", p->score);
        return 0;
    }
    
    展开全文
  • C语言结构体成员变量访问方法

    千次阅读 2020-09-02 21:58:14
    对于C语言结构体而言,其实就相当于一种数据类型,我们可以用结构体去定义相关的结构变量,那么访问结构体成员变量时,有时是用圆点运算符,有时是使用 ->,这两者应该在什么情况下使用呢。 #include<stdio.h&...

    对于C语言结构体而言,其实就相当于一种数据类型,我们可以用结构体去定义相关的结构变量,那么访问结构体成员变量时,有时是用圆点运算符,有时是使用 ->,这两者应该在什么情况下使用呢。

    #include<stdio.h>
    
    struct stu{
    	int num;
    	int math;
    };
    
    int main()
    {
    	struct stu zhangsan;
    	struct stu *p;
    	zhangsan.math = 100;
    	zhangsan.num = 43;
    	p = &zhangsan;
    
    	p->math = 99;
    	p->num = 99;
    	printf("%d %d\n", zhangsan.math, zhangsan.num);
    	return 0;
    }
    

    通过上面的程序我们可以看到,当我们定义结构体变量时,我们可以用圆点运算符来访问他的成员;若定义了结构体指针,并让结构体指针指向我们的结构体变量,若用结构体指针访问结构体中的成员,则用 ->。

    参考博客:https://blog.csdn.net/u012841414/article/details/80602529

    展开全文
  • C#中结构体类型变量称为对象或称为结构实例。 定义结构体类型变量称为把结构体类型实例化,这时会根据 结构体类型的定义为结构体变量分配相应的存储空间。 1.结构体类型变量的定义 结构体变量的定义语法如下...

    C#中结构体类型变量称为对象或称为结构实例。

    定义结构体类型变量称为把结构体类型实例化,这时会根据 结构体类型的定义为结构体变量分配相应的存储空间。

    1.结构体类型变量的定义

    结构体变量的定义语法如下: 结构体类型名 变量名列表;

    变量名列表中各变量名用逗号隔开,变量名的命名方法遵守 C#的标识符命名规则。例如:

    STUINFO s1, s2, s3; 
    

    结构体变量被声明后,系统会为其分配存储空间。

    每个结构体变量都有自己独立的存储空间,每个变量都有自 己的数据副本,对一个变量的操作不会影响另一个变量。

    2.结构体变量的初始化

    每个结构体类型定义后,语言都隐式地为它提供一个无参数 的构造函数,这个构造函数把结构的每个成员都设置为该成员 类型的默认值。

    如果希望在结构体变量定义时,能够对这些变量进行初始化 则需要用户自己创建有参数的构造函数。

    结构类型可以有实例构造函数和静态构造函数,但不能有析 构函数。

    ①实例构造函数

    结构类型都有一个预定义的,没有参数的构造函数。此构造 函数不允许删除和重定义,并且这个无参数的构造函数会一直 存在,并不会因为定义了其他带参数的构造函数就消失。

    注意:如果没有使用new运算符,是不可以使用数据成员的 值(除非已显示地设置了该数据成员的值)和调用函数成员的(除 非所有数据成员均已经被赋值)。
    下面是实例构造函数的一般定义形式:

    public 结构体类型名(参数列表) 
    {
    	函数体
     } 
    

    结构体不支持显式定义无参数的实例构造函数。当定义带参 数的构造函数时,一定要完成结构所有字段的初始化,如果没 有完成所有字段的初始化,编译时会发生错误。

    struct POINT
    {
       public double x;//横坐标   
       public double y;//纵坐标   
       public POINT(double a,double b)//带参数的构造函数   
       {     
       		x=a;
       		y=b;   
       	}
     }; 
     	static void Main()
     	 {   
     	 	POINT p1 = new POINT(2.0,3.1);//对结构体类型变量p1进行初始化   
     	 	POINT p2;//不对p2进行初始化 
     	 } 
    

    ②静态构造函数

    结构类型也可以有静态构造函数,静态构造函数用于初始化 静态数据成员。静态构造函数有如下特点:

    •静态构造函数不能有访问修饰符和参数;

    •静态构造函数不能访问实例成员;

    •静态构造函数无法直接进行调用;

    结构和类的静态构造函数的触发规则不同,类的静态构造函 数是在创建第一个实例或引用任何静态成员之前自动调用的, 而结构的静态构造函数在以下情况调用:

    •使用显式声明的构造函数进行初始化;

    •调用结构的方法或访问结构的静态数据成员(无论是读取还 是赋值,访问实例数据成员不会触发CLR自动调用静态的 构造函数)。

    展开全文
  • 之前遇到struct老是感觉自己知识存在漏洞,现总结如下: 定义:1。单独定义: 即先定义好一个struct ,然后再用这个结构类型去定义变量;...即在定义结构体类型的同时定义结构变量; eg: struct FriendList{...

    之前遇到struct老是感觉自己知识存在漏洞,现总结如下:

    定义:
    1。单独定义:

    即先定义好一个struct ,然后再用这个结构类型去定义变量;

    eg:

    struct FriendList{ .... }; FriendList friend1.friend2;

    2. 混合定义:

    即在定义结构体类型的同时定义结构变量;

    eg:

    struct FriendList{ char name[10]; int age; char telephone[13]; }friend1,frind2;

    3.无类型定义

    在定义结构体变量的同时省略结构名,此后除非重新写定义过程否则无法再定义该类型变量;

    eg:

    struct { .... }friend1,friend2;

    赋值:

    1.用{}

    eg

    struct S{ int ia; double db; }; S s={9,9.8};

    2.当然也可以相同变量间赋值

    成员访问:

    1.用.

    2.如果是指针变量有两种方法

    1.先解引用(*p)再用.正常访问;

    2.直接—>

    展开全文
  • 结构体成员变量

    2019-07-29 21:46:16
    struct type-name(结构体类型名称books){ .. }object_name(结构变量可以是一个或多个book1,book2) 访问结构成员 成员访问运算符(.) 结构变量名称和我们要访问的结构成员之间的一个句号 book1.title ...
  • C语言中结构体指针的成员变量访问

    千次阅读 2014-11-25 19:19:40
    大家都知道可以用点访问结构体成员变量,同时在结构体指针下可以使用“->”访问成员变量,但在结构体指针下也可以用“.”访问成员变量。 例如typed struct{ const char *name; int age; }person; void get_info...
  • 通过指向结构体变量的指针变量输出结构体变量成员的信息。解:程序:#include#includeint main(){struct Student{long int num;char name[20];char sex[10];float score;};struct Student stu_1;//定义struct ...
  • 示例1我们先来定义一下需求:已知结构体类型定义如下:struct node_t{ char a; int b; int c; };且结构体1Byte对齐#pragma pack(1) 求:结构体struct node_t中成员变量c的偏移。注:这里的偏移量指的是相对于...
  • 本文主要探讨的是c语言中关于...示例我们的探讨还是从一个简单的示例开始:已知结构体类型定义如下:structnode_t{chara;intb;intc;};且结构体1Byte对齐:#pragmapack(1)接下来我们探讨几种访问该结构体成员变量c...
  • 结构体变量成员访问方法

    千次阅读 2016-03-21 17:28:01
  • 在一些系统中我们经常需要一些结构体进行控制,如文件序列化,结构体成员较多。在这些变量控制中,我们可能需要知道它的位置,而不用访问具体成员即可控制其值。下面我们将解决这些所面临的问题,我们就可以正确地...
  • 7.1 结构体概念 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构体。...结构体同时也是一些元素的集合,这些元素称为结构体成员(member),且这些成员可以为不同的类型,成...
  • 代码区 #include #include main() { struct student { long num; char name[10]; }stu1,*p; p=&stu1; stu1.num=100; strcpy(stu1.name,"jenney"); //此处的赋值方法格外...指针变量的基类型必须与 结构体变量类型相同
  • 结构体变量结构体类型的定义

    万次阅读 多人点赞 2019-08-02 16:43:19
    结构体类型定义 定义方式1: Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } *LinkList; 定义方式2: struct LNode { int data; // 数据域 struct LNode *next; // 指针域 }; ...
  • 结构体成员变量偏移量

    千次阅读 2018-07-05 19:15:36
    转自示例1我们先来定义一下需求:已知结构体类型定义如下:struct node_t{ char a; int b; int c; };12345且结构体1Byte对齐#pragma pack(1) 求:结构体struct node_t中成员变量c的偏移。注:这里的偏移量指的是...
  • 上篇博文(关于c语言结构体偏移的一点思考)c语言中结构体偏移做了一些思考,发现博文中还有一些小的问题,没有描述的足够清楚,所以才萌生了本篇博文的想法。 为什么不直接将本篇博文作为上篇博文的一个“注”呢?...
  • 结构体指针变量

    2021-05-22 17:04:41
    那么,结构体类型是用户自己定义的数据类型,同样也可以定义指针变量结构体类型定义指针变量格式如下: struct 结构体类型名* 指针变量名; 定义指针变量的格式与基本数据类型定义指针变量格式一样。例如前面...
  • 结构体变量结构体指针变量及其自增运算,结构体数组作函数的... 表示通过指针变量引用(访问结构体变量b的成员num p = a;或p = &a[0]; 将结构体指针变量指向结构体数组a p[0].num = a; 表示给结构体数组中的
  • 一种用宏来简单获取结构体成员变量的方法 #define MEM_OFFSET(TYPE,MEMBER) ((size_t)&((TYPE*)NULL)->MEMBER) 这里实际上一个空指针或者说指针地址为0,而取的某个成员变量的地址减去基地址(0),也不是...
  • 结构体指针访问成员

    千次阅读 2018-09-18 20:45:25
    /结构体指针访问成员/ #include&lt;stdio.h&gt; struct Student { int num; char name[20]; float score; }; int main() { //1. //该种方法用指针指向一个结构体,使用时p-&gt;成员名 /struct Student ...
  • 上一节做法的思路是,解释器监视结构体成员变量,每当结构体成员的值发生改变,那么解释器就把所有成员变量的值复制到内存中。这次,我们反其道而行之,在解释器读取结构体成本变量的数值之前,先把内存中的信息拷贝...
  • C语言结构体(5) 结构体指针变量

    千次阅读 2020-03-30 16:13:17
    那么,结构体类型是用户自己定义的数据类型,同样也可以定义指针变量结构体类型定义指针变量格式如下: struct 结构体类型名* 指针变量名; 定义指针变量的格式与基本数据类型定义指针变量格式一样。例如前面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,883
精华内容 23,553
关键字:

对结构体类型的变量的成员的访问