阿里的几道C++题

一、如下:

#include"stdafx.h"

#include <iostream>

#include "stdlib.h"

 

using namespace std;

int main(void)

{

    const int a = 10;

    int * p = (int *)(&a);

    *p = 20;

    cout << "a = " << a << ", *p = " << *p << endl;

    cout << &a << endl << p << endl;  //测试时添加的

    system("pause");

    return 0;

     }

运行结果为:a=10,*p=20;

解释:通过指针类型的强制类型转换,达到非常量指针指向常量数据,并修改常量的效果。

结果a=10,是编译器优化的结果,导致直接使用了a的硬编码值,而不是读取内存。


可在a的定义中加上volatile,禁止编译器优化。


int main(void)

{

    volatile const int a = 10;

    int * p = (int *)(&a);

    *p = 20;

    cout << "a = " << a << ", *p = " << *p << endl;

    cout << &a << endl << p << endl;  //测试时添加的

    system("pause");

    return 0;

     }


结果为a=20,*p=20;


二、linux64位系统下程序:

void print_size(int32_t array[10])

{

printf("%d\n",sizeof(array));

}

int main(){

int32_t myArray[10];

printf("%d ",sizeof(myArray);

print_size(myArray);

}

结果:40 8


三、给定一个整数sum,从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum,最快的平均时间复杂度是:o(n)


void findclosest(int *array,int len,int n){
int result1=0,result2=0;
int left=0;
int right=len-1;
int diff=0x7fffffff;
while(left<n&&right>=0&&left!=right){
if(abs(array[left]+array[right]-n)<diff){
result1=array[left];
result2=array[right];
diff=abs(array[left]+array[right]-n);
if(array[left]+array[right]<n)
left++;
else
right--;


}else{
if(array[left]+array[right]<n)
left++;
else
right--;
}
}
cout<<result1<<" "<<result2<<endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值