结构体指针与结构体变量用作函数参数时有什么区别,在用法上

作者&投稿:甘叶 (若有异议请与网页底部的电邮联系)
~

结构体指针与结构体变量用作函数参数区别:

(1)结构体指针作为函数参数时,调用时传递的是指向一个结构体变量的指针(即结构体变量的地址);结构体变量作为函数参数时,调用时传递的结构体变量本身。

(2)以下代码显示了调用时的区别

#include <stdio.h>


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

typedef struct {

int x;

int y;

} Point;    


void fun1(Point  point) {

point.x += 10;

point.y += 10;

}


void fun2(Point pPoint) {

pPoint->x += 10;

pPoint->y += 10;

}


void main( )

{

Point p;

p.x = 100;

p.y = 200;


/* 调用 fun1 */

fun1( p );

printf("x=%d, y=%d\", p.x, p.y);


/* 调用 fun2:取p的地址作为参数 */

fun2( &p);

printf("x=%d, y=%d\", p.x, p.y);

}

程序的输出为:

x=100, y=200

x=110, y=210

(3)观察上面程序运行的结果发现 fun1函数执行后,p并没发生变化;而调用fun2后,p却改变了。这是因为:调用fun1时,所传递的参数p被复制到调用堆栈中,fun1函数所操作是堆栈中的变量而不是原来的那个变量(main中的p);另一方面,调用fun2时,传入的p的地址,fun2通过地址,修改了main中的变量p。这是结构体指针与结构体变量用作函数参数最大的区别。

一个结构体A,当它的指针作为参数传入函数func,那么在func中可以通过指针改变结构体的值,函数返回后,结构体的值被改变; 但是,当结构体变量作为参数传入函数func时,在func函数中即使对他进行了修改,当函数返回时,结构体本身并没有改变,因为修改的只是他的一个副本。

扩展资料

一、用结构体变量和指向结构体变量的指针构成链表

1、链表是一种常见的重要的数据结构。

2、链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。

二、链表中的每一个元素称为“结点”,每个结点都应包括两个部分:

1、是用户需要用的实际数据,

2、是下一个结点的地址。

三、可以看到链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。

四、可以看到,这种链表的数据结构,必须利用结构体变量和指针才能实现。

五、可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。

参考资料来源:百度百科-结构体类型




怎么将参数从结构体*转换为结构体*&?
在C++中,结构体指针(即结构体*)和结构体引用(即结构体&)是不同的数据类型,不能直接进行类型转换。但是,可以通过引用指针(即结构体*&)来实现将结构体指针转换为结构体引用的目的。假设我们有一个结构体定义如下:struct MyStruct { int x;int y;};现在,我们定义了一个指向MyStruct结构体...

结构体指针和结构体中的指针的区别
1、针对的数据类型不同:结构体指针:结构体指针对变量。结构体中的指针:结构体中的指针指成员。2、针对的含义不同:结构体指针:指向结构体类型的指针。结构体中的指针:指成员指针。3、用法不同:结构体指针:struct A{ int a; flaot b;};struct A m,*p=&m;p就是struct A类型的结构体指...

结构体类型指向结构体变量的指针
结构体变量的指针实际上是指向该变量内存地址的标识符,可以用来引用结构体变量的成员。例如,我们定义了一个名为`Student`的结构体类型,其中包含`num`、`sex`和`score`成员。通过定义一个`Student`类型的变量`stu`和一个指向`Student`类型的指针`p`,可以将`p`指向`stu`,即`p = &stu`。这样,...

结构体指针p加1后为什么结构体会变长
现在呢,把stu[0].name强制转换成结构体类型,那么stu[0].name就不是10个长度,而应该是一个struct student类型的长度,那么整个struct student 现在的长度就是14(int + struct student),p+1使struct student 类型的长度增加了.p+1应该指向下一个name....

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

c++结构体问题 当结构体变量与结构体指针重名出现错误?
int add(a *b)的意思是,申请临时变量b存放参数给出的地址,那么凡是在add函数中引用的变量b将是这个临时变量,全局变量因为重名无法被引用,可以考虑修改一下:int add(a *c) { b[0].id=c->id; return 0; } int a=0;改为int d=0;已经定义a是结构名了无法再用于整型变量取名。

定义一个结构体指针,结构体指针中有一个成员为指针变量,那么此...
第一种,是通过变量名访问。格式是,变量名加上. 例如你例子中的 M就是个变量名,可以M.m 表明访问结构体里面的成员m,这里m是个指针变量。第二种,就是通过指向结构体的指针来访问。 格式是,变量名加上—> 。比如,我声明一个结构体指针,将它指向M。 struct A* p;这里,p是一个...

结构体内声明的指针与结构体外声明的指针的区别?求详解!
说明p1是指向struct student的指针,p1是一个变量。struct student *next;next是结构体struct student的一个成员。每个struct student的变量都有next这个成员。该成员同样指向结构体struct student 不知道我说的你是否明白 p1 = (struct student*)(malloc(sizeof(struct student)));p1->next = null;

结构体变量作为函数参数有几种传递方式?详细说明各自的优缺点。_百度知...
在C中结构体变量作为函数参数只有一种传递方式:值拷贝!主要缺点是传递时耗长,且函数中对结构体的操作结果一般是带不到主调函数中的;用结构体指针传递可以避免这些缺点,但那就不是“结构体变量”作为函数参数而“结构体指针”作为函数参数了。指针传递的缺点是容易把初学者搞糊涂,几乎无其他缺点。C+...

C语言中p-> x是什么意思啊?
C语言中p->x是结构体指针变量p引用结构体成员x的方式。结构体指针变量引用结构体成员用箭头(->),非”结构体指针“变量引用结构体成员用点(.)。操作方法如下:1、首先定义一个人的结构体。结构体中的每个成员都需要指明类型,如上例所示,姓名为char字符类型、年龄为int类型,身高为double类型。2、...

和平区18929072813: 结构体指针与结构体变量用作函数参数时有什么区别,在用法上
历泥炎可: 这两者作为函数参数,还是有很大的区别的,我说说自己的理解. 如: typedef struct A{int a;...}A; //定义结构体A void Func(A a); //通过结构体变量传参 void Func(A* pA); //通过结构体指针传参 调用函数时,因为函数参数要临时存放到栈中,...

和平区18929072813: 请问 结构体能做函数的参数吗? struct point makepoint ( int x ,int y , char c , struct point sp ) -
历泥炎可: k可以但是不提倡因为返回结构体时候开销很大,一般都是函数返回结构体指针,然后在对结构体指针进行解引用得到元素,不如p->a;

和平区18929072813: 如何把结构体指针作为函数返回值? -
历泥炎可: 前一个是个函数指针,如果有个函数是这样定义的 int pfunction( ) 那就可以用指针指向这个函数 然后调用时就可以这样用p();后一个是指针函数,他的返回值是一个指向整型变量的指针

和平区18929072813: 结构体作为函数参数 -
历泥炎可: 主要的看传进去的是值还是地址,, 如果传的是值,,那么在调用的函数中改变的仅仅是一个临时结构体变量的值,要使改变的值返回,那就传地址,或者传值,但是将函数的形参设置为结构体的引用!

和平区18929072813: c语言函数参数能用结构体变量当参数吗 -
历泥炎可: 当然可以,只要你先定义结构体就可以了

和平区18929072813: 结构体作为函数参数值传递的问题 -
历泥炎可: 传结构体地址与传结构体指针二者都可以作为传出参数,因为接受函数必须为其定义一个结构指针来接收,这样在函数内就可以修改结构体,在这点上二者没有区别.定义结构体指针未分配地址空间就作为参数传递会,如果你想把它作为传出...

和平区18929072813: 请问"结构体指针变量"在程序设计中的优点,最好举例说明! -
历泥炎可: 这两者作为函数参数,还是有很大的区别的,我说说自己的理解. 如: typedef struct A{int a;...}A; //定义结构体A void Func(A a); //通过结构体变量传参 void Func(A* pA); //通过结构体指针传参 调用函数时,因为函数参数要临时存放到栈中,...

和平区18929072813: 以结构体指针为形参,编写两个函数 -
历泥炎可: 帮你改好了: #includestruct student { long num; char name[16]; char sex; float score; }; void Input(struct student *p){ printf("输入学号:"); scanf("%d",(*p).num); printf("输入姓名:"); scanf("%c",(*p).name); printf("输入性别:...

和平区18929072813: 结构体指针作为函数参数 -
历泥炎可: 1 struct ceshi{int data;};void chage(struct ceshi *p);void main() { struct ceshi *shuju;shuju=(struct ceshi *)malloc(sizeof(struct ceshi));//要给结构体数据开辟一个存储空间shuju->data = 12;chage(shuju);printf("%d\n", shuju->data);...

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