阿里的几道C++题

来源:互联网 发布:淘宝家装物流 编辑:程序博客网 时间:2024/06/06 03:33

一、如下:

#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;
}


0 0
原创粉丝点击