c++函数(一)习题讲解

1.【单选题】

void swap (int a,int b)

{

        a = a ^ b;

        b = a ^ b;

        a = a ^ b;

}

int a {120},b {130};

swap{a,b};

a=? b=?

A 120,130         B 130,120         C130,0

解析:这道题中,函数体的内容是交换两个变量的值,采用的是位运算的方法,但因为传递的参数是值传递,所以并不能改变实参的值,所以选A。

2.【单选题】

void Add (int* a,int * b)

{

        a = b;

}

int a = 250,b = 350;

int* pa = &a;

Add ( pa, &b);

Pa[0] = ?

A 350         B 250         C 0

解 析:这道题比较难,很多人会选择A,但是这是的错误的选项,正确答案是B。函数体内部指针 a 等于指针 b,但是 a 仍然是一个局部变量,和它传入的指针 pa 并没有什么关系,仍然是值传递,无法改变变量的值。 

3.【单选题】

void Add (int* &a, int *b)

{

        a = b;

}

int a = 250, b = 350;

int* pa = &a;

Add ( pa, &b);

Pa [0] = ?

A 350         B 250         C 0

解析:这道题和上道题一样,只不过这次函数的形参为变为了 指针的引用,这个时候指针形参 a 就相当于 pa 的别名,a 可以改变 pa 的值,所以这道题选A。 

4.【单选题】

void Add(int& a)

{

        a++;

}

int a = 250;

Add(a);

说法正确的是:

A 最后 a = 251        B 最后 a = 250         C 程序不能运行

解析:这道题就比较简单了,Add 函数使用了一个引用参数 int& a,它允许函数直接访问和修改传入的变量的值,所以选A。

5.【单选题】

int main ( int argcount, char* c_ arg[])

{

        std::cout << argcount << std::endl;

        // 此时屏幕显示2

        int a = (int) c_arg[argcount];

        a = ?

}

A.0         B.无法确定         C.1

解析:这道题考察main函数参数的知识,这里我有专门的知识详解,具体参考我之前写的文章c++中main(int argc, char* argv[])参数详解,argcount 为 2,说明有 c_ arg数组有两个字符串,一个是运行文件名,另一个不确定,但是要求第三个元素,答案是0。

6.【单选题】

typedef int (*pAdd)(int,int);

pAdd p;

p可以指向下面哪个函数?

A void Add( int a, int b);

B int Add ( int a, int b);

C int Add( float a,f loat b);

解析:这道题用 typedef 定义了一个函数指针。很明显返回值类型和参数都为 int 类型,答案选B。

7.【单选题】

typedef int (*pAdd)(int, int);

int Add(int a, int b)

{

        return a  + b;

}

std::cout << Add;

屏幕显示50000

pAdd x = (pAdd)0x50000;

int c = x(100,200);

c = ?

A.100         B.200         C.300

解析:这道题答案是C,很简单。但是这道题的来意是弄明白函数的本质是什么,函数的本质就是内存,编译好后就把我们的代码翻译成为了二进制代码,这里 0x50000 就表示函数的首地址,然后通过(pAdd)类型转换为 x 函数。

8.【单选题】

int* Add()

{

        int* x = new int [100];

        return x;

}

以下说法正确的是:

A 这种写法是错误的,x是一个局部变量指针,返回可能会出错

B 这种写法是正确的

C 这种写法是错误的,应该return &x;

解析:这道题选B。Add 函数返回的是一个指针地址,这里 x 虽然是一个局部变量,但是 new 动态申请的内存地址并不会消失,return x 返回的仅仅是 x 的值,所以这种写法可以。

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大卫的纯爱战士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值