为指针赋值

时间:2011-07-21 16:07:40

标签: c++ pointers assign

如果我有以下例子:

int *x;
x = func(a);

对于声明:x = func(a);,我们是否说我们要将地址返回x?或者,我们究竟如何阅读它?

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

7 个答案:

答案 0 :(得分:7)

x是指向int的指针,换句话说,它是存储int的内存位置的地址。因此x = func(a)表示func返回int的地址并将其存储在变量x中。

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

答案 1 :(得分:4)

RE:您的编辑:

  

编辑:是否有资格说我们正在返回指向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;
}

答案 2 :(得分:3)

*x指向内存中的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,如上例所示。

答案 3 :(得分:2)

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

所以,如果你有:

int* myPointer;

和...

int* func();

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

答案 4 :(得分:1)

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

答案 5 :(得分: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是可以的,因为你返回的值(地址)将被保留,它所指向的内存也将被保留。

我也意识到我给你写了一本书。该死的,我确实在我累的时候会絮絮叨叨。

答案 6 :(得分:0)

这意味着func()返回int *。

类型的变量
  

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

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

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