int *a,double *b,bool *c,谢谢!

解决方案 »

  1.   

    初始化为啥?空?可以这样:
    int *a = 0;
    double *b = 0;
    bool *c = 0;
      

  2.   

    int *a = NULL;
    double *b = NULL;
    bool *c = NULL;
      

  3.   

    作为函数参数传递过去,int *a = 0不行,指针地址变成0了,赋值则出错,NULL也不行
      

  4.   

    自己试了下这样可以
    int aa=0;
    int *a = &aa;
    double bb =0;
    double *b = &bb
    bool cc=0;
    bool *c = &cc;
    感觉太别扭了啊,有没有简便点的方法?
      

  5.   

    自己试了下这样可以
    int aa=0;
    int *a = &aa;
    double bb =0;
    double *b = &bb
    bool cc=0;
    bool *c = &cc;
    感觉太别扭了啊,有没有简便点的方法?
      

  6.   

    可能我没说清楚,因为要调如下格式的函数
    func(int,int*,double*,char*,bool*)
    其中int是传入参数,而int*,double*,char*,bool*是返回值,所以要初始化几个指针,并传给函数调用,然后到这几个指针地址取返回值
      

  7.   

    如果是用在函数参数中的指针不用初始化的,比如对double *来说,定义一个double变量,比如 double dd,然后调用写成:func(..,&dd,...)就行了,其余的以此类推。
      

  8.   

    感谢!,不过我的情况有点复杂,这几个指针地址是我的类的私有成员变量来的,而这个函数是在DLL中,这几个指针不初始化不行,报无法写入的异常
      

  9.   

    例如要把char*作为参数返回,我现在是这样解决的
    char *msg = new char[100];
    func(int,msg)
    delete msg
    这样可以返回正确的值到msg,但凭什么new char[100],而不是new char[200]呢,我是知道返回字符串长度目前不可能超过100,但万一以后函数内部处理修改了,返回字符串长度大于100,岂不就出错了,作为一个初学者,真的觉得c++的指针实在太灵活,太容易错,也太危险了!
      

  10.   

    你的意思是不是是不是说,你要传进函数的那几个指针所指向的变量要在函数里面被改变啊?
    如果是这样的话,何必要多声明几个指针变量呢。你这样不就OK!double dReceiveVal = 0.0f;
    char cReceiveVal = '\0';
    bool bReceiveVal = false;//函数调用后上面的三个值都会被函数改变啊。func( 88, &dReceiveVal, &cReceiveVal, & bReceiveVal );  //Do something else..
      

  11.   

    如下结构
    class A
    {
    private:
      int *a;
      double* b;
      char* c;
      bool* d;
    public
      f(int,int* a,double* b,char* c,bool* d);
    }
    A::f(int,a,b,c,d)
    {
     func(int,a,b,c,d),需要返回结果到a,b,c,d中
    }
    而func又是在dll中的函数啊,我本意是自己写个类把这个DLL封装起来,可能是有点混乱,可谁让DLL这样传递返回值的的呢?郁闷啊
      

  12.   

    这个和DLL没有什么关系,因为a,b,c,d是成员函数,所以在构造函数里面new一下不就行了。
      

  13.   


    谢谢您的指点,最终也是这样做的了,在构造函数里采用new的方法初始化这些指针,其实归根到底还是我对指针不熟悉。
      

  14.   

    看来你的基础确实还不够巩固,我猜你是把我的代码这样引用了吧class A
    {
    private:
      int a; 
      double b = 0.0f; 
      char c = '\0'; 
      bool d = false;  
      //....
    };这样做当然是不行的,如果不是静态成员变量也就是有static声明,那么你这样做当然是不行的。
    非静态成员变量的声明和赋值必须分开,你要么在构造函数里面给成员变量赋值,要么在该类的其他的成员函数里面给成员变量赋值。总之这样做,不管该成员变量的属性如何,都不会通过编译的!
    你可以这样改class A
    {
    private:
      int a; 
      double b; 
      char c; 
      bool d;
    public:
      A();  //构造函数
      ~A();  //析构函数
    public: 
      void func( int, double*, char*, bool* );
      void AnotherFunc();
    };A::A()
    {
       a = 88;
       b = 0.0f;
       c = '\0';
       d = false;
       //构造函数里面成员变量赋值
    } void A::func( int a, double* b, char* c, bool* d )
    {
      /*
       *
       * Some operation
       */
    }void A::AnotherFunc()
    {
       //...
       func( a, &b, &c, &d );
       //...
    }