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;
}
結果:程序崩潰。 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;
}
傳入指針的指針,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;
}
5、實現不可繼承的類型,還可以用單列實現
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;
}