文档章节

郭炜老师(北京大学)程序设计与算法(三)第1周检测题

o
 osc_gu9d45li
发布于 2019/04/09 15:35
字数 1090
阅读 29
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>


xiti001-1.1简单的swap
```
/*
填空,使得程序输出结果是:5,3
*/
#include <iostream>
#include<cstdio>
using namespace std;
class A
{
public:
int x;
int getX() { return x; }
};
/*
传引用 ,那么调用形参a,也就是调用实参a
*/
void swap(A & a,A & b)
{
int tmp = a.x;
a.x = b.x;
b.x = tmp;
}
int main()
{
A a,b;
a.x = 3;
b.x = 5;
swap(a,b);
cout << a.getX() << "," << b.getX();
return 0;
}
```
xiti002-1.2难一点的swap
```
/*
填空,使得程序输出结果是:
5,3
*/
using namespace std;

#include <iostream>
#include<cstdio>
/*
解答:
int*&a拆分看:int*(&a),
int*说明&a整体代表一个指针,
然后因为&,说明a是一个引用。所以说a是一个指针的引用,
在swap函数中,交换了两个地址(因为是引用型,所以交换会影响到形参),所以交换成功

总结我的理解:
int a;
int & pa1 = a
//& 说明pa1是个引用,是int型的引用--引用的是int型的变量,那么操作pa1也就是操作那个整形变量a
int * pa = &;
int * & pa2 = pa
//& 说明pa2是个引用,引用的是(int *)型的变量pa,那么操作pa2也就是操作了那个整形指针变量pa
//那么,在这个函数中改变pa2里存的值,也就是改变了pa里存的值(也就是把整形指针变量pa指向的内容给改变了,以此达到交换目的)
*/
void swap(int *&pa2, int *&pb2)
{
int * tmp = pa2;
pa2 = pb2;
pb2 = tmp;
}
int main()
{
int a = 3,b = 5;
int * pa = & a;
int * pb = & b;
swap(pa,pb);
cout << *pa << "," << * pb;
return 0;
}
```
xiti003-1.3好怪异的返回值
```
/*填空,使得程序输出指定结果
输入:无
输出:10
*/
#include <iostream>
#include<cstdio>
using namespace std;
/*
1-函数返回值是个int型的引用,
2-return 返回了int型的a[i]
也就是函数返回值引用了整形变量a[i],
对返回值赋值,也就是对引用的整形变量a[i]赋值,从而达到操作a[i]的效果
*/
int & getElement(int * a, int i)
{
return a[i];
}
int main()
{
int a[] = {1,2,3};
getElement(a,1) = 10;
cout << a[1] ;
return 0;
}
```
xiti004-1.4神秘的数组初始化(解答详见下面的问题回答部分)
```
/*填空,使得程序输出指定结果
输入:无
输出:123,456
*/
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
//用指针数组定义二维数组
int * a[] = {0,0,new int[6],new int[6]};
*a[2] = 123;
a[3][5] = 456;
if(! a[0] )
{
cout << * a[2] << "," << a[3][5];
}
return 0;
}
```
问题:用指针数组int*a[3] ;for(int i=0;i<3;i++){ a[i]=new int[6] }也可以创建二维数组啊 对么?
回答:
没错!功能跟二维数组一样!
指针数组首先是一个数组,这个数组中的每个元素都是指针变量,每个指针变量也可以指向一个数组,但数组的元素必须和前面申请的类型一致,此时a就可以看做是二维数组
指针如果再指向的是数组,这个数组的内存怎么申请或者释放完全由开发人员决定,你可以自己申请也可以系统帮你申请,看你要怎么用。
这是动态分配数据,注意自己申请一定要记得释放。new的放在堆上,用完后要delete
虽然他的功能跟二维数组一模一样,但是还是有些许差别的。在堆上分配,你每new一次,都会在堆上分配一次空间,这块内存是连续的。但是,你new了三次,这是三块内存,实际上,不一定会连续在一起。
数组int a[3][6]里面的18个元素是连续的地址,但是你申请的指针数组,所对应的每个一维数组int[6]的地址不一定是连续的。按你的方法定义,每个一维数组里的地址是连续的,这几个一维数组之间的地址不是连续的,因为是动态分配的。

作者 :liangwenhao1108
CSDN地址 :https://blog.csdn.net/liangwenhao1108/article/details/89147261
微博地址 :https://weibo.com/p/1005056474319128/wenzhang  
博客园地址:https://www.cnblogs.com/WHaoL/
公众号地址:
版权声明 :我们的精力和生命都是有限的,复制代码的话,到我的CSDN文章里吧。欢迎大家批评指正,让我们一起进步吧!本文为博主原创文章,转载请附上博文链接!

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
漏洞检测工具--Peach Fuzzer

Peach是一种用Python编写的 Fuzzer。这种工具有助于发现并公开许多漏洞,并认为是黑客和安全团体中最流行的工具之一。为了利用Peach框架,必须创建Phthon脚本,脚本 中包含了在服务器上执行的...

匿名
2013/02/06
8.7K
1
文档重复检测软件--DuplicateDetector

重复检测软件(Python实现) 可以检测英文文档之间的重复,包括完全重复(除标点,格式外都相同),和相近重复(部分(90%)抄袭) TODO: 1. 数据抄袭(英文文档中数据集中的地方,比较多的数据相...

zoowii
2012/11/01
769
0
编程语言--Tcl/Tk

Tcl/Tk 是一种简明,高效,可移植性好的编程语言。在信息产业领域具有广泛的应用。 Tcl/Tk 的发明人 John Ousterhout 教授在八十年代初,是伯克利大学的教授。在其教学过程中,他发现在集成电...

匿名
2012/11/11
8.6K
0
MySQL全文搜索引擎--mysqlcft

MySQL在高并发连接、数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不仅效率差,而且以通配符%开头作查询时,使用不到索引,需要全表扫描,对数据库的压力也很...

张宴
2012/11/29
1.6W
2

没有更多内容

加载失败,请刷新页面

加载更多

Vim清除最后一个搜索突出显示 - Vim clear last search highlighting

问题: Want to improve this post? 想要改善这篇文章吗? Provide detailed answers to this question, including citations and an explanation of why your answer is correct. 提供此问题......

技术盛宴
47分钟前
13
0
原子属性和非原子属性有什么区别? - What's the difference between the atomic and nonatomic attributes?

问题: What do atomic and nonatomic mean in property declarations? 属性声明中atomic和nonatomic是什么意思? @property(nonatomic, retain) UITextField *userName;@property(atomic, ......

fyin1314
今天
7
0
马化腾每天刷 Leetcode?代码你打算写到几岁?

本文作者:o****0 前几天,一张未证真伪的截图流传,图中显示马化腾几乎每天都会在 Leetcode 上提交代码。 截图还贴出一个 Leetcode 账户地址。该地址的头像已从马化腾的照片换成腾讯 logo,...

百度开发者中心
前天
13
0
滴滴 3000+ Kylin Cube 背后的实践经验揭秘

本次分享主要有三个部分:Kylin 在滴滴的整体应用、架构的实践经验、滴滴全局字典最新版本的实现以及 Kylin 最新实时 OLAP 探索经验分享。 Kylin 在滴滴的应用&架构 Kylin 在滴滴的三类应用场...

浪尖聊大数据
昨天
9
0
ssh“权限太开放”错误 - ssh “permissions are too open” error

问题: I had a problem with my mac where I couldn't save any kind of file on the disk anymore. 我的Mac出现问题,无法再在磁盘上保存任何类型的文件。 I had to reboot OSX lion and r......

javail
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部