0

以下是我面临的问题的一个小规模示例。在下面的示例中,我使用 int 指针,但在我自己的代码中,我实际上使用的是指向另一个类的指针。

我确实需要/希望能够将多个指针传递给同一个方法,并且我真的不想为每个指针编写一个特定的方法。当我运行代码时,当然,我没有得到预期的结果。

我想我已经缩小了问题的范围,但不知道如何解决它。由于 C++ 中的所有内容都是按值传递的,因此我传递的指针需要通过引用传递。我确实尝试在以下方法中更改我的方法以通过引用调用:

int** getIntPointer() {return &p1;} 

void initializeP1(int **&ip,int n)void initializeP1(int **ip,int n)

但似乎没有任何效果。

有谁知道如何解决这个问题?

谢谢

#include <iostream>

using namespace std;

class Test {
  private:
    int *p1;   
    int *p2;
    int sizeP1;
    int sizeP2;   
  public:
    int** getIntPointer() {return &p1;}
    void initializeP1(int **&ip,int n){
        sizeP1=n; 
        *ip=new int[n];

        for(int i=0;i<n;i++)
            *ip[i]=i;         
    }  
    void printP1() {
        for(int i=0;i<sizeP1;i++)
            cout<<p1[i]<<" "; 
    }
};

int main() {
    Test t;
    int** p = t.getIntPointer();
    t.initializeP1(*&p,10);
    t.printP1(); 

    return 0;
}
4

2 回答 2

5

这一行是错误的:

*ip[i]=i;

运算符的[]优先级高于*运算符,因此该行等效于此:

*(ip[i])=i;

您需要将其更改为:

(*ip)[i]=i;
于 2012-10-10T21:25:30.370 回答
0

另外,你为什么调用函数initializeP1但使用**ip?做它喜欢

 void initializeP1(int n){
    sizeP1=n;
    p1=new int[sizeP1];
    for(int i=0;i<sizeP1;i++)
         p1[i]=i;
 }  

本来会以这种方式排在第一位(更不用说*'s 等等 :)

于 2012-10-10T21:44:46.660 回答