1、
void funa(const int& a, const int& b)
{
cout << a << endl;
cout << b << endl;
}
int main()
{
int i = 0;
funa(++i, i++);
}
——————————————————————
这个根据不同的编译器会有不同的结果:
vs:2 0 vs的方法参数是右向左入栈
换成java的话是:0 1 与vs相反
2、
java:
int i = 0;
System.out.println("" +(i++) + (++i)+ (++i)+(i++)+ (++i) );
答案是:0 2 3 3 5
vs:
int i=0;
cout<<i++<<++i<<i++<<++i<<i++<<++i<<endl;
莫名其妙的答案-, g++编译的也是一样
3、
void funb(char * p)
{
p = (char *)malloc(100);
}
int main()
{
char* str = NULL;
funb(str);
memcpy(str, "hello", 100);
cout << str;
{
p = (char *)malloc(100);
}
int main()
{
char* str = NULL;
funb(str);
memcpy(str, "hello", 100);
cout << str;
}
结果:程序崩溃。 funb为传值,并没有改变str的内存指向,。 将funb改成 funb(char* &b) 就可以了
4.
void fun(char* p){ *p= 'c';};
void main()
{
char* p = "aa";
cout<< *p;
}
p值为改变。
-----------------------------------------------------------
void fun( char** p)
{
*p= "c";
};
void main()
{
char* p = "aa";
fun(&p);
cout<< *p;
}
5.
void fun(char* p){ *p= 'c';};
void main()
{
char* p = "aa";
cout<< *p;
}
void fun( char** p)
{
*p= "c";
};
void main()
{
char* p = "aa";
fun(&p);
cout<< *p;
}
template <typename T>
class Base
{
friend T;
private:
Base() {}
~Base() {}
};
class Finalclass : public Base<Finalclass>
{
public:
Finalclass() {}
~Finalclass() {}
};
class D : virtual public Base
{
public;
D(){};
~D(){};
};
void main()
{
Finalclass *p = new Finalclass; //堆上对象
Finalclass fs; //栈上对象
}
6、
void fun(char* p){ *p= 'c';};
void main()
{
char* p = "aa";
cout<< *p;
}
void fun( char** p)
{
*p= "c";
};
void main()
{
char* p = "aa";
fun(&p);
cout<< *p;
}
int _tmain(int argc, _TCHAR* argv[])
{
func1();
for(vector<B*>::iterator it = v.begin(); it != v.end(); ++it){
cout<< (*it)->a << endl;
}
union V{
struct X{
unsigned char s1:2;
//初始化内存大小
unsigned char s2:3;
unsigned char s3:3;
}x;
unsigned char c;
}v;
v.c = 100;
printf("%d", v.x.s3);
7、定义一个无返回值的无参数fun指针类型
typedef void(*fun)(void);
8、实现递归100以内的加法
int add(int n){
if(n < 0)
return 0;
int sum = add(n-1);
return sum + n;
}