指向结构体的指针应该怎么理解?

作者&投稿:轩夏 (若有异议请与网页底部的电邮联系)
关于指向结构体变量的指针如何理解?~

结构体可以理解成对数据做了一个封装,成为一个新的数据类型, 指向结构体的指针,和平常的指针是一样的。

指针保存的是这个结构体的起始地址!
typedef struct MY
{
int a;
int b;
}MY;

MY *prMy=NULL;
MY test;

prMy=&test;

prMy 就是指向结构体变量 test的内存地址,实际上也就是 int a;变量的地址,

一般情况下,“指向”是指指针的目标,如有int
a=4,*p=&a;,那么常说变量a是指针p的指向;不过这要看看前后文,有时核心意思可能有些许差别。当一个指针指向结构体变量时,这个指针中就存放了这个结构体变量中的第一个成员的第一个元素的地址,并承载这个结构体的结构信息,诸如这个结构体变量在内存中占有多少个字节、都有些什么类型的成员以及它们的存储发生等……

当一个指针变量指向结构体时,我们就称它为结构体指针。注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,所以给 pstu 赋值只能写作:

struct stu *pstu = &stu1;

而不能写作:

struct stu *pstu = stu1;

还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。

下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量:

struct stu *pstu = &stu;

struct stu *pstu = stu;

扩展资料

结构体指针作为函数参数

结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针。

如果结构体成员较多,尤其是成员为数组时,传送的时间和空间开销会很大,影响程序的运行效率。所以最好的办法就是使用结构体指针,这时由实参传向形参的只是一个地址,非常快速。

调用中采用的结构体变量。在传入函数时通过指针void *para指针传递过去。需要注意的是不能直接使用para->a来访问结构体的成员。

这是因为para只是接收过来的地址。para虽然指向的结构体的首地址。但是这个指针并不知道自己指向的是什么内容和有多少成员。需要(date *)para强制转化一下。这样para就可以知道自己是什么类型的指针。有多少成员。



指针就是内存地址,这个你要搞明白。
比如 定义一个变量a,指向变量a的指针就是a在内存中的内存地址。
所以 指向结构体的指针 就是这个结构体在内存中的内存地址

在VC中,int、long类型数据都占用4个字节内存单元,float也占用4个字节,而double类型则占用8个字节,其他C语言稍有不同。当这些类型的指针指向同类型数据时,该指针总是指向第一个字节,对于结构类型来说,其占用的内存单元可能要多得多,但是,与其他类型数据一样,指向结构类型的指针也指向第一个字节。从这方面来看,无论是基础类型还是定义类型数据,本质上是没有区别的。

比如有个结构体
typedef struct std
{
int i;
int j;
}std;

实例化一个结构体变量std ss;
用一个指针指向它std* p = &ss;
那么p就是指向结构体ss的指针。

<结构体变量><指针>


关于指向结构体的指针
这个是反汇编,你学过的话可以看看 没学过的话我大概是怎么回事 首先,你要知道printf的是从右往做左求值的(求一个值然后入栈,栈的概念应该学过吧)指针先是指向 li 的 然后把 li 放入栈中, 然后执行p++ 这个时候 p就指向了wang 然后 wang入栈,然后再p++ ,p指向了 shi, shi入栈。...

c++中如何在一个结构体里定义一个指向该结构体的指针?
有下面两种方式:1、struct s{ char c;int i;};struct *p1;\/*p1是指向s结构体的指针*\/ 2、typedef struct{ char c;int i;}s,*ps;s *p2;\/*p2是指向结构体的指针*\/ ps p3;\/*p3是指向s结构体的指针*\/

结构体类型的指针
一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。 指向结构体变量的指针引用结构体变量中的成员下面通过一个简单例子来说明指向结构体变量的指针变量的应用。

C语言中如何以结构体变量的地址作为函数形参,以便将指向结构体变量的指...
C语言中,所有的变量都存储在内存中,可以通过&运算符获得变量的内存地址,函数调用时,只需要把普通变量前加上&符号,就可以达到传递变量地址的目的。例如:定义一个结构体类型 struct Yearmonthday{ int year, month, day;};定义相关函数,参数类型指定为结构体类型指针 void input(struct Yearmon...

结构指针是怎么指向结构体的
结构体指针首先是指向的是结构体的首地址

c语言中指向结构体指针问题,求大神,为甚么printf("%d",*p);错误*去掉...
p是结构体指针,s是结构体数组,指针也是数字,应该是长整型数字,s[0].num是结构体数组中的一个普通整型数字,p=(struct student*)s[0].num;这一行虽不报错,但p指向的单元的内容是未知的,类型也是未知的,不建议这样做;所以printf("%d",*p);这一行以数字格式输出*p就报错了,把*去掉,...

C语言指向结构体变量的指针
include<stdio.h>struct fa{ int number; char name[20]; char sex; int age; float score;};int main(){ struct fa a[1]={1001,"lee",'m',25,90.3}; struct fa * q; q=&a[0]; printf("Number=%d\\n",(*q).number); printf("Name=%s\\n",(*q).name); ...

在结构体中如下给结构体内的指针赋初值,可以吗?正确方式是什么_百度知 ...
a={"chengu",27,&b},你这么赋值的时候,b还没有定义,当然会出错了。struct student {char number[10];int age;student *next;}c={"erpeng",29,NULL}, b={"xiaokai",26,&c}, a={"chengu",27,&b};

C++类指针在访问的时候何时用"->",何时候用"."
很高兴你能问这个问题,我想很多学程序设计不久的学生真不知道->的用法,我仔细说给你听吧:简单来说,“->”的前面一定是一个“指向结构体的指针”或“对象指针”,后面是结构或对象的一个"成员" 。如有:A->B,则可以肯定A是一个结构体指针或类的对象指针,而B是A中的一个成员。以你的便子...

我想问一下指针如何表示二维结构体数组里的一个元素
再执行下面语句:struct Yourstruct structArray[10],*p;p = structArray; \/\/p指向数组中的第1个结构体变量。++p; \/\/ p指向数组中的第2个结构体变量。2、如果是在结构体中定义了指针,每个结构体变量都有自己的存储空间,结构体成员指针指向何处也是由你来决定的。

石龙区19283619359: c语言关于指向结构体的指针的理解 -
符亭童康: 给你说吧.我说简单点.typedef的用法int a.;在int 前面加上typedef ,把a 改成任意的标识符,如 hh,现在就是typedef int hh;hh m;m就是一个int 的变量了.就像宏定义一样,..你那个按照这样理解就可以了

石龙区19283619359: 结构体中的指针是什么意思呢? -
符亭童康: 1、结构体中的指针和结构体中的其他变量没有什么不同,结构体中的一个成员变量而已.只是这个变量是指针类型,和其他普通指针一样使用. 2、看变量名和结构体名称,你发的这种应该一般用在链表的实现中,这个Node结构体就是链表中的一个节点,然后结构体中定义一个指针变量next,用于指向下一个节点.

石龙区19283619359: 结构体指针,类指针是什么意思? -
符亭童康: 结构体是一个集合,类也是.一个就像原始人,一个就像现代人一样. 指针:指向结构体的指针叫结构体指针.指向类的指针叫类指针. 要我说,其实就是间接操作.有点像公司来了个新员工,你不知道名字,但是另一个人知道一样.你得通过另一个人才能找到那个新员工.

石龙区19283619359: 用指向结构体的指针来定义函数 怎么理解 怎么用,求高手看看下面的代码帮忙解释一下 C语言 -
符亭童康: 这不是定义函数,是定义函数的类型,就是说函数返回值的类型是个指向结构的指针. 比如你的函数,返回的 m就是指向这个结构的指针,当然指针一定要赋值.一般的做法是 m = (Matrix)malloc( sizeof(sMtx) ) ; // 分配空间 if( !m ) return NULL ; // 分配失败 ...... return m ; // 返回空间 你不能返回一个局部的结构,因为如果是局部的,在函数返回的时候,这个局部结构已经被销毁,比如这样写就是错误的 sMtx n ; m = &n ; ....... return m ; // 返回之后n已经不存在

石龙区19283619359: 指针当中的指向是什么意思?一个指针变量指向结构体变量意味着什么? -
符亭童康: 一般情况下,“指向”是指指针的目标,如有int a=4,*p=&a;,那么常说变量a是指针p的指向;不过这要看看前后文,有时核心意思可能有些许差别.当一个指针指向结构体变量时,这个指针中就存放了这个结构体变量中的第一个成员的第一个元素的地址,并承载这个结构体的结构信息,诸如这个结构体变量在内存中占有多少个字节、都有些什么类型的成员以及它们的存储发生等……

石龙区19283619359: C语言结构体指针的初始化应该怎样理解? -
符亭童康: 1、structs{charc;inti;};struct*p1;/*p1是指向s结构体的指针*/2、typedefstruct{charc;inti;}s,*ps;s*p2;/*p2是指向结构体的指针*/psp3;/*p3是指向s结构体的指针*/

石龙区19283619359: 一个指向结构体的指针,是指向结构体中最先定义的变量么? -
符亭童康: 你的概念要清楚,指向结构体的指针的值就是结构体中最先定义的那个变量的地址不错,但这指针却不指向它,而是指向这个结构体的.取第一个元素同样要用->获得,想直接用*是拿不到的,且要出错!指针承载的不光是地址,若光是地址,那还有分int *、char *、FILE *……型的必要吗?

石龙区19283619359: 指向结构体的指针 -
符亭童康: 因为你定义了一个结构体指针p,用来指向此类结构体,但是你却没有给他赋值,此时p的值为NULL,你并没有在内存中为p分配任何空间,所以p->a=1这句就会出段错误.修改方法1:可以给p分配一段内存空间,并使其指向此空间:p=(struct abc *)malloc(sizeof(struct abc)); p->a = 1; 方法2:可以让p指向一个已存在的内存空间:struct abc temp; p=&temp; p->a = 1; 还有printf 拼写错误

石龙区19283619359: 结构体指针是一个结构体吗 -
符亭童康: 结构体是一个数据类型;结构体指针是指向这个数据类型的指针变量,是存放着指向一个该种结构体数据的地址,类型就是该结构体指针.指针的名字与成员没有直接关系.它就是一个名字而已;只不过用这个名字去声明的结构体变量全部都是指向该结构体的指针,并且声明的时候不需要加*而已.(通过变量访问的时候还是要用*的)一种声明的方法,方便程序里的处理,仅此而已.

石龙区19283619359: 指向结构体的指针如何使用结构体中的元素 -
符亭童康: 对于标题中的问题答案是肯定的.如果第一个成员是数组的话,指向的也是数组第一个元素的地址.对于第三个问题,你说的“该指针”不太清楚,我就按我的理解来说:如果指针是指向结构体,那么指针加1的话,指针就会向后移动结构体大...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网