问题1:数组的地址问题?
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
char a[5];
printf("%x\n",a);
printf("%x\n",&a);
printf("%x\n",&a[0]);
printf("%x\n",a+1);
printf("%x\n",&a+1);
printf("%x\n",&a[0]+1);
return 0;
}
输出:
4cbeef90
4cbeef90
4cbeef90
4cbeef91
4cbeef95
4cbeef91
问题2:类型转化,别老是背书了,你用过吗?上代码吧!
#include<iostream>
using namespace std;
void update(double *val)
{
*val = 3.0;
}
class Base{
private:
int i,j;
public:
virtual void display()
{
cout<<"Base display"<<endl;
}
};
class Child:public Base
{
private:
int k;
public:
virtual void display()
{
cout<<"Child display"<<endl;
}
};
void display(Child *p)
{
if(p)
p->display();
}
int main()
{
int firstNum = 1,secondNum = 2;
double result = static_cast<double>(firstNum)/secondNum;
cout<<result<<endl;
//pointer,address
//move const or voliate
const double *param = new double(3.2);
update(const_cast<double *>(param));
cout<<*param<<endl;
//must contain virtual functions
//from base pointer to child pointer,returns null if not work
Base *p = new Child();
display(dynamic_cast<Child *>(p));
//form one pointer to another
//you 'd better build a construtor
void *q = new Child();
display(reinterpret_cast<Child *>(q));
return 0;
}