C++;指针问题 仍然在C++中工作,但这在我的书中出现了,我不明白它是什么意思: MyClass * FunctionTwo (MyClass *testClass) { return 0; }

C++;指针问题 仍然在C++中工作,但这在我的书中出现了,我不明白它是什么意思: MyClass * FunctionTwo (MyClass *testClass) { return 0; },c++,function,pointers,C++,Function,Pointers,我的问题是,第一个间接运算符的意义是什么 (MyClass *[<- this one] FunctionTwo(MyClass *testClass))? (MyClass*[MyClass*表示此函数返回指向MyClass实例的指针 由于代码实际返回0(或NULL),这意味着此函数的任何调用方都会返回指向MyClass对象的NULL指针 我认为以下是更好的例子: int *testFunc(int *in) { cout << "This is the point

我的问题是,第一个间接运算符的意义是什么

(MyClass *[<- this one] FunctionTwo(MyClass *testClass))?

(MyClass*[MyClass*
表示此函数返回指向MyClass实例的指针

由于代码实际返回0(或NULL),这意味着此函数的任何调用方都会返回指向MyClass对象的NULL指针

我认为以下是更好的例子:

int *testFunc(int *in) {
    cout << "This is the pointer to in " <<  in << endl;
    cout << "This is the value of in "  << *in << endl;
    return in;
}

int testFuncTwo(int *in) {
    cout << "This is the pointer to in " <<  in << endl;
    cout << "This is the value of in "  << *in << endl;
    return *in;
}


void test() {
  int a = 1;

  cout << "a = " << a;

  int output = *testFunc(&a); // pass in the address of a
  cout << "testFunc(a) returned " << output;

  output = testFuncTwo(&a); // pass in the address of a
  cout << "testFuncTwo(a) returned " << output;

}
int*testFunc(int*in){
cout当您定义:

int *testFunc(int *in)
您正在定义一个函数,该函数返回指向int变量的指针

int testFuncTwo(int *in)
只返回一个int变量

int testFuncTwo(int *in)

在本例中,零正在进行隐式强制转换-第一个函数返回
(int*)0
,第二个是
0
。如果将示例函数的原型从返回
MyClass*
更改为只返回
MyClass
,则可以看到此隐式强制转换。如果
MyClass
中没有
运算符int
方法,则会出现一个很好的错误。

如果您有类似于i的方法nt*函数()这将返回一个指向整数的指针。MyClass *只是表示函数返回一个指向MyCype类对象的指针。在C++中,用户定义的对象被视为,因此一旦创建了自己的对象,它们就可以作为参数传递,从子程序返回,或者被赋值为一个与标准类型相同的变量。 在您发布的代码块中,控制台的输出不会有任何差异,因为您更改的是函数返回的类型(未使用),函数的内容是相同的。

鉴于问题的性质,我将提供一个粗略的答案

指针指向某物:

int x = 123; // x is a memory location (lvalue)
int* y = &x; // y points to x
int** z = &y; // z points to y
在上面的代码中,z指向y,y指向x,x存储一个整数123

x->y->z[123](这不是代码,它是一个 (文本图)

如果我们想让y指向另一个整数,或者让NULL指向nothing,我们可以让z指向另一个指向整数的指针,如果我们想让NULL指向nothing

那么为什么我们需要指向其他东西的指针呢?下面是一个例子:假设你有一个简单的游戏引擎,你想在游戏中存储一个玩家列表。也许在游戏的某个时候,玩家可以通过对该玩家调用kill函数而死亡:

void kill(Player* p);
我们想传递一个指向玩家的指针,因为我们想杀死原来的玩家。如果我们这样做了:

void kill(Player p);
我们不会杀原始玩家,而是杀他的副本。这对原始玩家没有任何影响

指针可以用NULL值(NULL或0)进行赋值/初始化,这意味着指针不会指向任何东西(或者如果指针以前指向某个东西,则不再指向任何东西)

稍后,您将了解与指针类似的引用,只是指针可以在其生命周期内更改其指向的对象。引用不能更改,因此无需显式取消引用指针以访问指针对象(指针指向的对象)


注意:我有点绕开了你原来的问题,但是你提供的示例代码没有内在的有意义的行为。如果不首先理解一般意义上的指针就试图理解这个示例,那么这是一种倒退,你最好先学习这个一般理论。

使用给出一个单一的值,并返回C++中的单个值为:

return_type function name (    parameter_type parameter_name )
在您的例子中,返回类型是MyClass*,意思是“指向MyClass的指针” 此外,在您的例子中,参数_类型也是MyClass*

换句话说,您的代码可以重写为:

typedef MyClass *PointerToMyClass;
PointerToMyClass FunctionTwo (PointerToMyClass testClass)
{
 return 0;
}

这看起来更熟悉吗?

啊,好的,这很有道理。谢谢。