1
#include "stdafx.h"
#include <iostream>
using namespace std;

class thing{
public:
    int stuff, stuff1, stuff2;

    void thingy(int stuff, int *stuff1){
        stuff2=stuff-*stuff1;
    }
}

int main(){
    thing t;
    int *ptr=t.stuff1;
    t.thingy(t.stuff, *ptr);
}

我一直在练习 C++ 中的课程和指针。我要做的是让函数thingy通过传递指向stuff1值的指针来修改事物类中的stuff2数据成员。我该怎么做呢?

4

5 回答 5

2

您正在创建一个指向 int 类型的变量:如果您想要指向 的指针t.stuff1,请获取其地址:

int* ptr = &t.stuff1;
        ___^ here you are taking a reference (address)

然后,将该指针传递给您的thing::thingy方法:

t.thingy(t.stuff, ptr);
                __^ don't dereference the pointer, your function takes a pointer
于 2012-04-18T04:44:56.827 回答
0

试试这个:

int *ptr;
*ptr = t.stuff1;

t.thingy( t.stuff, ptr);
于 2012-04-18T04:40:21.333 回答
0

您应该传递地址:

*ptr = &(t.stuff1);
于 2012-04-18T04:45:44.753 回答
0

我可能真的迟到了,但我想得到一些好的评论和测试

    //#include "stdafx.h"
    #include <iostream>
     using namespace std;

     //class declaration
     class thing{
        public:
            int stuff, stuff1, stuff2;
       thing(){//constructor to set default values
    stuff = stuff1 = stuff2 = 10;
        }


         void thingy(int param1, int *param2){
            stuff2=param1-*param2;
          }
        };

       //driver function
       int main(){
          thing t;//initialize class
      cout << t.stuff << ' ' << t.stuff1 << ' ' << t.stuff2 << endl;//confirm default values
          int *ptr= &t.stuff1;//set the ADDRESS (&) of stuff1 to an int pointer
      cout << *ptr << endl;
           t.thingy(t.stuff, ptr); //call function with pointer as variable
       cout << t.stuff1;
          }
于 2012-04-18T04:55:19.933 回答
0
    int *ptr=t.stuff1;

你不能将 int 转换为 int* t.stuff1 是一个 int 值,而不是 int 的指针试试这个:

    int *ptr=&t.stuff1;

你应该添加“;” 在类定义的最后,像这样:

    class Thing {
        ...
    };

当你调用 t.thingy 时,第二个参数是 int* 但是 *ptr 是一个 int 值,而不是一个指针。ptr 是一个指针,而不是 *ptr。试试这个:

    t.thingy(t.stuff, ptr);

你应该知道:

    int i_value = 1;
    int* p_i = &i_value;
    int j_value = *p_i;

在这种情况下: i_value 的类型 j_value *p_i 是 int p_i 的类型是 int*

于 2012-04-18T06:06:16.837 回答