1

在以下代码中通过指针调用或返回指针有什么区别吗?我只是尝试修改我的结构并获得结果。
以免说我有一个结构。

struct Address
{
  const char* name; // "Jim Dandy"
  int number; // 61
};

Address* Modifying2(Address* adr)
{
  adr->name="Long John2";
  return adr;
}
//or
void Modifying3(Address* adr)
{
  adr->name="Long2 John2";
 // return adr; no return
}
void print_addr2(const Address& r)
{
  cout << r.name << '\n'
  << r.number << ' ' << r.street << '\n';  
}
int main()
{
   Address jd =
    {
    "Jim Dandy",
    61
    };

   Address* jdPtr=&jd;
   Modifying3(jdPtr);
   print_addr(jdPtr);
   //or
   print_addr(Modifying2(jdPtr));

  return 0;
}

结果是一样的,但哪个更安全?我的意思是定义明确?

4

4 回答 4

1

在上面的例子中返回一个指针的唯一原因是如果你想允许调用链:

Modifying2(Modifying2(jdPtr));

对于这个特定的实现,这没有多大意义,因为该函数只是将一个值设置为一个常量。

在所有其他情况下,返回void可能更可取,因为通过返回最初传入的相同指针不会获得任何收益。

于 2013-10-21T07:51:56.060 回答
1

两种方法都在做同样的事情。返回指针不是必需的。

但最安全的方法是通过引用传递值。(你还没有实现这种方式)。在这里你必须怎么做

void Modifying4(Address &adr)
{
  adr.name="Long2 John2";
}
于 2013-10-21T07:59:25.053 回答
0

没有真正的区别。两者都有效。

但要小心指针!如果您分配的字符串比初始值长,则必须重新分配指针指向的空间!!!!

制造

于 2013-10-21T07:51:53.300 回答
0

在修改指针指向的值后返回指针是多余的。在现实世界中,像我们这样的其他人或您公司的其他编码人员将在您的代码中花费大量时间。

我忘了是谁说的,但你也会花费 90% 的时间来翻阅别人的代码。

如果我看到你的函数在工作中接受并返回一个指针,我会很困惑你为什么这样做,这似乎表明缺乏对指针如何工作以及为什么你首先将指针传递给函数的理解.

不要这样做。

于 2013-10-21T08:26:31.933 回答