一些網上的題目

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;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章