PKU 程序设计与算法(三)C++面向对象的程序设计 第一周 从 C 到C++ 测验与作业

题目虽然简单,但是还是有点意思。

1:简单的swap

1:简单的swap
没啥说的,考引用在子函数中作参数时的基本用法。

A&a,A&b

2:难一点的swap

2:难一点的swap
考了指针的引用。
如果直接传入指针,在子函数中得到的是指针的副本。虽然透过指针去访问、修改元素是有效的,但是对指针本身的交换是无效的。
例子:
main中

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

调用swap(pa,pb)
则子函数应该是

    void swap(int* &a,int* &b)
    {
    	int * tmp = a;
    	a = b;
    	b = tmp;
    }

3:好怪异的返回值

3:好怪异的返回值
也没啥说的,返回引用即可,这样实际上操作的是返回元素的内存,而不是一份拷贝。

int&

4:神秘的数组初始化

4:神秘的数组初始化
最有意思的是这个,我也只想写这个。
这题考了两个知识点,new的运算符特性和逗号运算符。
把等号右边花括号里应当看成一个表达式,用逗号隔开,逗号运算符的特性是被分割开的单元单独执行,返回最后一个表达式的值。

a[3]=new int[6],a[0]=NULL,new int[4]

所以可以给里面的单个元素直接赋值。
首先分析出a其实是一个int的指针数组,里面的元素都是int的指针,int的指针既可以指向单个int变量,也可以作为一个数组的某个地址。
由底下的a[3][5]知道a[3]是一个数组的首地址指针,其元素至少有6个(这样才能访问到下标为5的),所以给a[3]申请6个int空间。
由if的条件可以看出,要想if为true,就要使!a[0]!=0,即a[0]=0,对于指针来说,0就是NULL。直接给指针赋值0在一些编译器中是非法的。
逗号运算符的最后一个就是返回给a分配的空间。

猜你喜欢

转载自blog.csdn.net/weixin_43873801/article/details/87866176