1

例如,如果我有以下内容:

int *x;
x = func(a);

对于语句:x = func(a);,我们是否说我们正在返回地址x?或者,我们究竟如何阅读它?

编辑是否有资格说我们正在返回一个指向的指针x?如果是这样,你能解释一下这是如何完成的吗?我的意思是,我们如何返回一个指针?

4

7 回答 7

7

x是指向 an 的指针int,换句话说,它是存储 an 的内存位置的地址int。所以x = func(a)意味着func返回 an 的地址int并将其存储在变量 中x

注意不要返回返回后内容未定义的局部变量的地址func

于 2011-07-21T16:09:12.710 回答
4

回复:您的编辑:

编辑:是否有资格说我们正在返回指向 x 的指针?如果是这样,你能解释一下这是如何完成的吗?我的意思是,我们如何返回一个指针?

是的,它当然符合条件。尝试将指针视为任何其他数据类型并将其视为任何其他数据类型。在引擎盖下,它们只是内存地址。可以像返回任何其他数据类型一样返回指针。

以这段代码为例:

int* giveMeAPointer() {
  return y;
}
int* x = giveMeAPointer();

假设“y”被全局声明为:“int* y = ...”。现在“x”指向的内存地址与“y”指向的内存地址相同。

现在假设“y”没有被声明为一个指针,而是作为一个普通的int(例如“int y = 5”)。该函数可以做到这一点并且仍然有效:

int* giveMeAPointer() {
  int* result = &y;
  return result;
}
于 2011-07-21T16:25:38.913 回答
3

*xis 指向内存中的 int 类型变量。所以函数func应该将地址返回给 int。

int *x;
x = new int;          // create your own int 
*x = 5;               // access - set it's value
delete x;             // delete int - free memory
x = getGlobalCounter();
(*x)++;               // increment global pointer

例如 getGlobalCounter 函数:

static int counter;
int *getGlobalCounter() {
   return &counter;   // return address of counter
}

但是删除从函数返回的对象并不总是好主意。在这种情况下,它应该会导致运行时错误,因为计数器没有int像上例中那样动态分配。

于 2011-07-21T16:27:58.190 回答
2

如果您将变量的值分配给函数的返回类型,则该返回类型必须与变量的类型匹配。指针也是如此。

所以,如果你有:

int* myPointer;

和...

int* func();

然后设置 myPointer 等于 func() 会将“myPointer”指向的内存地址更改为 func() 返回的内存地址。

于 2011-07-21T16:11:52.157 回答
1

该语句只是读取 x 分配了 function 返回的值func。为了使代码编译时没有错误,func 应该返回一个地址。并且为了使代码按预期执行AlexFZ,您应该注意func不要返回函数本地变量的地址。

于 2011-07-21T16:19:35.390 回答
1

x 是一个指针,特别是指向 int 的指针。所以应该很明显,有两个内存位置被使用。一个用于指针,一个用于它指向的内存(假设指针不为空)。

指针本身包含一个内存地址,特别是它指向的内存的位置。0xa456e4fa 之类的东西。

是的, func() 正在返回一个指针。func 的原型如下所示。

int * func(someObj a); //I don't know the datatype of your parameter,
                       //so I'm just making something up.

请注意,返回类型是一个指向 int 的指针。从这个和我之前所说的,应该很明显这将返回什么。0xyyyyyy 形式的东西,或内存地址/指针。该内存地址进入您的 x 指针。

请记住,指针本身并不保存它所指向的数据,它只是地址。你真的没有理由不能返回一个指针。但是,您确实需要小心返回的内容。您不想返回局部变量的地址,因为一旦函数完成执行,该变量将超出范围。然后,您将返回无效地址。但是,返回本地指针的 VALUE 很好,因为您返回的值(地址)将被保留,它指向的内存也将被保留。

我也刚刚意识到我给你写了一本书。妈的,我累的时候肯定会闲逛。

于 2011-07-23T05:28:16.693 回答
0

这意味着 func() 返回一个 int* 类型的变量。

是否有资格说我们正在返回一个指向 x 的指针?

不,我们返回一个指向整数的指针并将其分配给 x,因为它是一个指针。

这是一个返回 int 指针的示例代码
int* func(int a)
{
int *y = &a;
return y;
}

于 2011-07-21T16:12:02.060 回答