结构体类型数据作为函数参数(三种方法)_C 语言

(1)用结构体变量名作为参数。

复制代码 代码如下:

#include<iostream>
#include<string>
using namespace std;
struct Student{
 string name;
 int score;
};
int main(){
 Student one;
 void Print(Student one);
 one.name="千手";
 one.score=99;
 Print(one);
 cout<<one.name<<endl;
 cout<<one.score<<endl;//验证 score的值是否加一了
 return 0;
}
void Print(Student one){
 cout<<one.name<<endl;
 cout<<++one.score<<endl;//在Print函数中,对score进行加一
}


这种方式值采取的“值传递”的方式,将结构体变量所占的内存单元的内存全部顺序传递给形参。在函数调用期间形参也要占用内存单元。这种传递方式在空间和实践上开销较大,如果结构体的规模很大时,开销是很客观的。

并且,由于采用值传递的方式,如果在函数被执行期间改变了形参的值,该值不能反映到主调函数中的对应的实参,这往往不能满足使用要求。因此一般较少使用这种方法。

(2)用指向结构体变量的指针作为函数参数

复制代码 代码如下:

#include<iostream>
#include<string>
using namespace std;
struct Student{
 string name;
 int score;
};
int main(){
 Student one;
 void Print(Student *p);
 one.name="千手";
 one.score=99;
 Student *p=&one;
 Print(p);
 cout<<one.name<<endl;
 cout<<one.score<<endl;//验证 score的值是否加一了
 return 0;
}
void Print(Student *p){
 cout<<p->name<<endl;
 cout<<++p->score<<endl;//在Print函数中,对score进行加一
}

这种方式虽然也是值传递的方式,但是这次传递的值却是指针。通过改变指针指向的结构体变量的值,可以间接改变实参的值。并且,在调用函数期间,仅仅建立了一个指针变量,大大的减小了系统的开销。

(3)用接头体变量的引用变量作函数参数

复制代码 代码如下:

#include<iostream>
#include<string>
using namespace std;
struct Student{
 string name;
 int score;
};
int main(){
 Student one;
 void Print(Student &one);
 one.name="千手";
 one.score=99;
 Print(one);
 cout<<one.name<<endl;
 cout<<one.score<<endl;//验证 score的值是否加一了
 return 0;
}
void Print(Student &one){
 cout<<one.name<<endl;
 cout<<++one.score<<endl;//在Print函数中,对score进行加一
}

实参是结构体变量,形参是对应的结构体类型的引用,虚实结合时传递的是地址,因而执行效率比较高。而且,与指针作为函数参数相比较,它看起来更加直观易懂。

因而,引用变量作为函数参数,它可以提高效率,而且保持程序良好的可读性。

时间: 2024-09-28 01:14:46

结构体类型数据作为函数参数(三种方法)_C 语言的相关文章

结构体类型指针做函数参数(C++)

因为用到了这块,所以转了一篇文章. 原文地址http://blog.sina.com.cn/s/blog_5f777ddd0100chbl.html 设有学生情况登记表如图所示,用选择排序法对该表按从小到大进行排序. 学生情况登记表 学号num 姓名name[8] 性别sex 年龄age 成绩score 101 zhang m 19 95.6 102 zhao m 20 89.0 103 wang f 18 96.5 104 shan m 20 94.0 105 chen f 20 76.5 1

C语言实现返回字符串函数的四种方法_C 语言

前言 C语言返回字符串函数共有四种方式,分别如下:       使用堆空间,返回申请的堆地址,注意释放       函数参数传递指针,返回该指针       返回函数内定义的静态变量(共享)       返回全局变量 下面来看看详细的介绍 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 使用分配的内存,地址是有效 char *fun() { char* s = (char*)calloc(100, sizeof(char*) ); if (s) strcpy ( s , "abc &qu

android jni传递结构体类型给c函数,返回结构体,怎么写啊

问题描述 android jni传递结构体类型给c函数,返回结构体,怎么写啊 android jni传递结构体类型给c函数,返回结构体,怎么写啊 c方法:OutAnalyseResultPacket* EcgMainPro(InEcgPacket* pPacKet) 参数和返回值都是结构体类型 解决方案 参考:http://blog.sina.com.cn/s/blog_414e587f0101411f.html 另外,C那里返回结构体指针不太好,因为你没有机制去释放这些内存.容易内存泄漏.除非

JavaScript 申明函数的三种方法 每个函数就是一个对象(一)_javascript技巧

一.申明函数的三种方法 (Declaring a Function) 方法一:function functionName([parameters]){functionBody}; Example D1 复制代码 代码如下: function add(a, b) { return a+b; } alert(add(1,2)); // produces 3 当我们这样申明函数时,函数的内容被解释(但没有执行,要我们调用该函数才会执行),同时,一个名为add的对象已经建立. 方法二:将一个未命名的函数

JavaScript中定义函数的三种方法

 这篇文章主要介绍了JavaScript中定义函数的三种方法,本文直接给出代码实现,同时给出了构造函数的相关知识,需要的朋友可以参考下     在JavaScript的世界里,定义函数的方法多种多样,这正是JavaScript灵活性的体现,但是正是这个原因让初学者摸不着头脑,尤其对于没有 语言基础的同学.正所谓条条大道通罗马,但是如果道路太多,会让行路者不知所措,因为不知道走那条路才是正途,呵呵,废话一大篇,闲言少叙,先看代码: 代码如下: /*第一种方法,使用function语句,格式如下*/

利用Objective-C运行时hook函数的三种方法

方法一,hook已有公开头文件的类: 首先写一个Utility函数: #import <objc/runtime.h> void exchangeMethod(Class aClass, SEL oldSEL, SEL newSEL) { Method oldMethod = class_getInstanceMethod(aClass, oldSEL); assert(oldMethod); Method newMethod = class_getInstanceMethod(aClass,

JavaScript中定义函数的三种方法_javascript技巧

在JavaScript的世界里,定义函数的方法多种多样,这正是JavaScript灵活性的体现,但是正是这个原因让初学者摸不着头脑,尤其对于没有 语言基础的同学.正所谓条条大道通罗马,但是如果道路太多,会让行路者不知所措,因为不知道走那条路才是正途,呵呵,废话一大篇,闲言少叙,先看代码: 复制代码 代码如下: /*第一种方法,使用function语句,格式如下*/ function fn(){ alert("这是使用function语句进行函数定义"); } fn(); /*第二种方法

C#中DataTable 转换为 Json的方法汇总(三种方法)_C#教程

在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,Ajax异步请求的数据格式就是Json.鉴于此,我今天来分享将DataTable 转换成 Json的3种方法.换句话说如何在ASP.NET将一个DataTable序列化为 Json数组.或者如何从一个DataTable返回一个Json字符串.这篇文章将采用StringBuilder,JavaScriptSeri

从设备配置上优化数据中心能耗的三种方法

数据中心能源消耗的优化有几种方法,其中之一就是通过优化操作设备的参数来实现.例如,可以动态优化冷冻水设置参数. 一.冷水机组设置更高的温度可能更节能 冷水机组的冷冻水设定值不能设置太低,如果用户通过一个固定的设定值来优化数据中心能效,这可能会起到反作用.例如,将冷冻水的温度固定在7℃,而在一年90%的时间里,其设定温度过低,另外的10%的时间里,其设定的温度则有些过高. 因此,通过监控所有信息数据,并将其捆绑在一起,才可以优化设定值,特别是可以提高设定点,并使系统尽可能多地采用自然冷却,这样就能