關於void*函數返回

1、ios

samplec++

#include<iostream>
using namespace std;

void* test(void* pass)
{
    return pass;
}



int _tmain(int argc, _TCHAR* argv[])
{
    char* a=(char*)malloc(sizeof(char));
    a="a";
    char* b = (char*)malloc(sizeof(char));
    b=(char*)test(a);
    cout<<"b:"<<b<<endl;
    cout<<"a:"<<a<<endl;

    getchar();
    return 0;

}

注意  test的返回值爲void*  要強制轉換成char*指針spa

 

 

 

2、指針

 

#include <iostream>

using namespace std;

class CBase
{
public:
    CBase(int a,long b,char c)
    {
        a=a;
        b=b;
        c=c;
    }
private:
    int a;
    long b;
    char c;
};



int main()
{
    unsigned long num1 = 0;
    unsigned long num2 = 0;
    unsigned long num3 = 0;
    unsigned long num4 = 0;

    unsigned long num5 = 0;

    CBase *base1 = new CBase(10,100,'d');
    CBase *base2 = new CBase(10,200,'c');

    num1 = *((unsigned long*)base1);
    num2 = *((unsigned long*)base2);

    num3 = unsigned long((unsigned long*)base1);
    num4 = unsigned long((unsigned long*)base2);

    

    cout << "num1:"<< num1<< endl;
    cout << "num2:"<< num2<< endl;

    cout<<endl;
        
    cout << "num3:"<< num3<< endl;
    cout << "num4:"<< num4<< endl;


    getchar();
    return 0;

}

 

 

1)因爲類的private裏的數據排列時 先int,long而後是char.code

  指針Base1和Base2的指針自身的地址是不同的;指向的內容不同;blog

  可是當指針強制轉換成long(32位下是4個字節)型的時候;在再解引用時候;他們指向是分別是Base1類的前四個字節和Base2類的前四個字節;而因爲他們的前四個字節get

 

? 解引用爲何不是10?io

 用c++的強轉class

相關文章
相關標籤/搜索