首页 - 科技 > 结构指针作函数参数 关于c语言中的结构体数组作为函数参数传递的

结构指针作函数参数 关于c语言中的结构体数组作为函数参数传递的

发布于:2024-04-09 作者:nyajiajiao.cz 阅读:11

一、用指针变量作为函数参数

#include<stdio.h>

void swap1(int x,int y),swap2(int*px,int*py),swap3(int*px,int*py);

int main(void)

{

int a=1,b=2;

int*pa=&a,*pb=&b;

swap1(a,b);

printf("s1:a=%d,b=%d\n",a,b);

a=1,b=2;

swap2(pa,pb);

printf("s2:a=%d,b=%d\n",a,b); a=1,b=2;

swap3(pa,pb);

printf("s3:a=%d,b=%d\n",a,b); return 0;

}

void swap1(int x,int y)

{

int t; t=x; x=y; y=t;

}

void swap2(int*px,int*py)

{

int t; t=*px;*px=*py;*py=t;

}

void swap3(int*px,int*py)

{

int*pt; pt=px; px=py; py=pt;

}

扩展资料

对象与类

对象(Object)

Visual Basic.NET具有“面向对象”的特性,Visual Basic.NET应用种程序的基本单元是对象,用 Visual Basic.NET编程就是用“对象”组装程序。这种“面向对象”的编程方法与传统的全部用代码编制程序的方法有很大区别,就像用集成电路芯片组装电视机和用三极管,二极管组装电视机的区别一样。显然,“面向对象”的编程方法比传统的编程方法更简单,更方便,并且编写出的程序也更加稳定。因此,“对象”可以被看做 Visual Basic.NET程序设计的核心。

在 Visual Basic.NET程序设计中,对象中还可以包含头,手,腿,脚等部位,其中的每个部位又可以单独作为作为被研究的对象。在 Visual Basic.NET程序设计中,整个应用程序就是一个对象,应用程序中又包含着窗体(Form),命令按钮(Command),菜单(Menu)等对象。

类(Class)

在 Visual Basic.NET中,对象是由类创建的,因此对象可以说是类的具体实例,这就好比是蛋糕和做蛋糕的模具之间的关系。

各种不同的对象分属于各种不同的种类。同一类对象可能具有一些不同的特征(或是说同一类对象不一定具有完全相同的特性);具有某些相同的特性的对象,不一定是同一类对象。

参考资料来源:百度百科-VB

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

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

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

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

#include<stdio.h>

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

typedefstruct{

intx;

inty;

}Point;

voidfun1(Pointpoint){

point.x+=10;

point.y+=10;

}

voidfun2(PointpPoint){

pPoint->x+=10;

pPoint->y+=10;

}

voidmain()

{

Pointp;

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语言中的结构体数组作为函数参数传递的

楼主朋友,你的程序有问题的几个地方是:

1、参数传递不对,因为你的函数定义时的形参为以Point为基类型的指针,而在函数声明和调用中你用的是Point类型变量;

2、函数的返回值类型和你最后输出的时候的数据格式说明符不符,因此出现了你所说的错误。

修改如下就没问题了

#include<stdio.h>

#include<math.h>

typedef struct{int x; int y;} Point;

int PointDist(Point*);

int main()

{

Point d[2];

printf("Enter the x value of point1:"); scanf("%d",&d[0].x);

printf("Enter the y value of point1:"); scanf("%d",&d[0].y);

printf("Enter the x value of point2:"); scanf("%d",&d[1].x);

printf("Enter the y value of point2:"); scanf("%d",&d[1].y);

printf("The Euclidean distance between two Points is%d\n",PointDist(d));//把lf改成 d

system("pause");

return 0;

}

int PointDist(Point dot[2])//实际上如果不修改上面的lf时可以把此处以及函数声明中

//的int改成double

{

int a,b;

a=(dot[0].x-dot[1].x)+(dot[0].y-dot[1].y);

b=a+1;

return b;

}

四、C语言中文件指针能不能作为参数传递

1.指针完全可以作为函数的参数进行传递,其实在C中,数组作为参数传递,跟指针作为参数传递都很类似的,指针传的是该指针指向的地址,而数组参数则是将该数组的首地址传递过去。

2.文件指针

在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。定义说明文件指针的一般形式为:

FILE*指针变量标识符;

其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。在使用文件时,需要在内存中为其分配空间,用来存放文件的基本信息,给结构体类型是由系统定义的,C语言规定该类型为FILE型,其声明如下:

typedef struct

{

short level;

unsigned flags;

char fd;

unsigned char hold;

short bsize;

unsigned char*buffer;

unsigned ar*curp;

unsigned istemp;

short token;

}FILE;

3.例如:

FILE*fp;

表示fp是指向FILE结构的指针变量,通过fp即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。习惯上也把fp称为文件指针。

二维码

扫一扫关注我们

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件至 465747283@qq.com举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

相关文章

  • 封坛酒存储条件 坛装黄酒

    封坛酒存储条件 坛装黄酒

    窖藏酒如何封坛口窖藏酒封坛口方法步骤如下:准备材料:牛皮纸、黄泥、粽叶、棉绳。1、将牛皮纸盖在坛口,粽叶依次交叠放在牛皮纸上方。2、将放好粽叶的酒坛用棉绳扎紧坛...

    2024-05-17

  • 凤凰照相机质量 请教凤凰相机

    凤凰照相机质量 请教凤凰相机

    请教凤凰相机凤凰EK-100,国产机里算最好的光圈优先自动曝光35mm单反机,焦距28mm~70mm,最近摄影0.35m凤凰品牌的诞生...

    2024-05-17

  • 如何给mate7手机刷机(华为mate7如何刷机)

    如何给mate7手机刷机(华为mate7如何刷机)

    一、华为mate7如何刷机如果您忘记了锁屏密码,可以参考以下方法解决:EMUI5.0及以上的系统忘记密码,只能通过强制恢复出厂设置清除密码。这个方法会清除您设...

    2024-05-17

  • 1000多的小米耳机,小米耳机和索爱耳机价位一样买那个

    1000多的小米耳机,小米耳机和索爱耳机价位一样买那个

    一、小米耳机和索爱耳机价位一样买那个价位一样买索爱,作为一家以扩音器出名的品牌,一直都紧跟时代的潮流。价格比较亲民,音质上也是在同价位里也比较突出,整体的音质恰...

    2024-05-17

  • wifi隐蔽摄像机,无线wifi监控摄像头可以远程监控吗

    wifi隐蔽摄像机,无线wifi监控摄像头可以远程监控吗

    一、怎样检查房间里有没有隐形摄像头检测房间里有没有摄像头方法如下:1.以毒攻毒:一般来说,用于偷拍的摄像机的光通量不高,需要额外的红外照明。所以,如果你找到一个...

    2024-05-17

  • 复制键盘用什么键盘好一点?电脑打字用什么键盘

    复制键盘用什么键盘好一点?电脑打字用什么键盘

    调整图片位置用什么键盘好什么样的鼠标键盘好用推荐一下。。我最要用于处理图片PS说实话,你是打游戏的话你自己用,那我建议你用罗技,razer的鼠标。自己用了就晓得...

    2024-05-17

自定义链接1

电话咨询
自定义链接2