《ASCE1885的IT笔试面试题》---0000 0002

本文解析了几道典型的C++面试题,包括不使用第三个变量交换两个变量的值、文件路径错误修正、内存分配与指针操作、void指针的正确使用及字符串与指针大小的区分等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

据传是《中软国际2009校园招聘》笔试题(有改动by ASCE1885):

1Swap two variables without using third variable?

解答:一开始容易陷入误区,认为交换必须通过移动变量来实现,因而少不了要用第三个变量,仔细想想,却有以下几种方法可以实现呢,基本思想是进行代数运算或逻辑上的变换(这里仅以基本内置类型int变量为例):

(1)简单的加法和减法运算:

函数形式:

void swap(int &a, int &b)

{

    a += b;

    b = a-b;

    a = a-b;    

}

宏定义:

#define swap(a, b) a+=b;b=a-b;a=a-b;

 

(2)异或方法,异或的特性是连续跟一个数异或两次得到的是它自身:

函数形式:

void swap(int &a, int &b)

{

         a = a^b;

         b = a^b;  //相当于a连续跟b异或两次,即是a

         a = a^b;  //相当于b连续跟a异或两次,即是b

}

宏定义:

#define swap(a,b) a=a^b;b=a^b;a=a^b;

 

(3)带乘除的方法,此方法效率较低,乘除嘛!

函数形式:

void swap(int &a, int &b)

{

         a = a+b;

         b = a - 2*b;

         a = (a-b)/2;

         b = a+b;

}

宏定义:

#define swap(a, b) a=a+b;b=a-2*b;a=(a-b)/2;b=a+b;

 

2what is wrong with the call fopen(C:/newdir/file.dat, r)?

解答:应该改为:fopen("C://newdir//file.dat", "r");

 

3what is wrong with the following code?

char *p;

*p = malloc(10);

解答:应改为:

char *p;

p = (char*)malloc(10);

 

4will the following program execute?

void main()

{

         void* vptr = (void*)malloc(sizeof(void));

         vptr++;

}

解答:不会,编译通不过,sizeof不能跟void;同时标准C++禁止对void指针进行增减操作。

 

5)以下程序运行结果是什么?

#include<iostream>

int main()

{

    char a[] = "hello";

    char *p = a;

   

    std::cout<<sizeof(a)<<std::endl;

    std::cout<<sizeof(p)<<std::endl;

    std::cout<<strlen(a)<<std::endl;

    std::cout<<strlen(p)<<std::endl;

   

    system("pause");

    return 0;   

}

 

解答:6 4 5 5,当然是每行一个数了。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值