文章标题
来源:互联网 发布:柯达i1220扫描仪软件 编辑:程序博客网 时间:2024/06/05 20:36
成为C++高手之如何同时返回两个值
<ul class="article_tags clearfix csdn-tracking-statistics" data-mod="popu_377"> <li class="tit">标签:</li>
关键字与标志符
关键字就是被C语言本身占用的那些字符串,比如:int,typedef。我们在定义变量或函数的名字时时要避开它们。
标志符就是我们定义的变量和函数的名字。
什么是结构
提出一个问题:写一个函数,计算两个数相除,要求同时返回商和余数,怎么写?
我们知道函数的返回值只能有一个,同时返回两个数这跟本不可能。但用结构就变为可能了!代码如下:
struct Result{ int shang; int yu;};struct Result div(int a,int b){ struct Result ret; ret.shang = a/b; ret.yu = a%b;}struct Result r = div(33432,44);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
首先定义了结构Result,又定义了函数div,最后调用了函数。
注意以结构做为类型时,必须在结构名前带有关键字struct 。想不带也可以,那就需要用typedef为struct Result取个别名,这个名字可以仍然是Result,但这样就可以省掉关键字struct了(如果你的源文件是.cpp而不是.c,不用typedef 也可以省掉关键字struct)。如:
typedef struct Result{ int shang; int yu;}Result;Result div(int a,int b){ struct Result ret; ret.shang = a/b; ret.yu = a%b;}Result r = div(33432,44);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
可以看到结构出现的目的很简单:把一坨相关的变量,弄到一起,作为一个整体使用。
结构其实是一种自定义类型,就像系统已有的类型int ,long 等一样。
访问结构中的变量的方式是用“.”。结构中的变量叫成员变量。
结构也可以作为函数的参数。
输出参数
两数相除同时返回商和余数的函数还有另一种写法。这种写法使用“输出参数”。前面讲的例子中,参数都是传入函数中的,让我们觉得参数就是向函数内传值的(这叫输入参数),但其实参数也可以让外部从函数内接收值。这就相当于返回的作用了。看一下新函数的写法:
int div(int a,int b,int *yu){ *yu = a%b; return a/b;}int yu;int shang = div(33432,44,&yu);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
注意div函数的第三个形参叫yu,而调用div函数时,第三个实参传入的变量也是yu,注意这两个yu不是一个东西。函数的形参只在函数内部起作用,所以外部变量与函数形参同名没问题 。
函数div返回的是商,而余数是通过形参yu返回的。
注意int 中的“”表示指针。指针中存放的是另一个变量的地址。所以在调用div时,第三个参数是&yu。“&”表示取地址。 在执行div函数时,参数yu保存的是外部变量yu的地址。通过地址操作变量用这种方式:*指针(这里是 *yu)。
外部变量yu在定义时,就具有了身体,占用一块内存(int型变量占据4个字节的内存),所以取它的地址时才能取到有效的地址。初学者常犯这样的错误:
int *yu;int shang = div(33432,44,yu);
- 1
- 2
这样就会引起崩溃,因为你虽然你传入的的确是个指针,但这个指针并没有指向有效的内存,div中用这个地址操作所指向的变量,那这个变量在哪里呢?仔细与上面对比,你就能明白。
关于指针的深入解释,请其待我的另一篇文章:“让你彻底明白指针”。
上一篇:成为C++高手之轻松理解二进制
下一篇:成为C++高手之条件语句
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 如何运用powerDesigner生成数据库…
- (转)SQLite之大数据量批量入库
- 名企热招 | 2018年名企内推计划启动,高薪名企聚集,免费内推!
- 将批量xml文件 数据批量添加…
- ArcGis9.3 破解 安装步骤 图…
- 文章标题
- google gson解析json 数组的方式
- 创建dblink的方法
- javascript如何传递后台传递过的js…
- Windows下如何根据端口号查杀进程
- iframe实现无刷新上传文件
- 基于tomcat配置JNDI
- JQuery动态创建DOM对象、表单元素
- Vector Markup Language (VML)