阿里的几道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;
}
- 阿里的几道C++题
- 几道C语言题
- 几道C笔试题
- 几道C笔试题
- 关于C语言的几道基础题
- 关于C语言的几道基础题
- C++::几道关于对象模型的经典题
- 【笔试题】阿里内推---CSS实现元素居中的几种方式
- C的几道练习及心得
- 几道C语言的题目
- 几道c语言的题目
- 几道c语言的题目
- 几道c语言的竞赛题目
- 有意思的几道C 题目
- 痛数阿里“来往”的几大败笔
- [阿里Hao]Android无线开发的几种常用技术
- 推荐几道C语言笔试题,测试你的C语言功底
- 阿里的笔试题
- XMPP的概念
- CSR8675 BLE操作经验
- win7最大内存设置问题,导致系统无法启动的解决方法
- python enumerate用法
- 使用极光推送实现分组发送和服务端集成
- 阿里的几道C++题
- 归一化含义
- HDU shǎ崽 OrOrOrOrz
- getopt_long
- JavaScript/jQuery 表单美化插件小结
- JQuery-ui
- 简单工厂模式
- 邻接
- Java网盘