一、如下:
#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;
}