指针调用和返回指针之间的区别

Difference between call by pointer and returning pointer

本文关键字:指针 区别 之间 返回 调用      更新时间:2023-10-16

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

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;
}

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

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

但最安全的方法是通过引用传递值。(您尚未以这种方式实现)。这是你必须怎么做的

void Modifying4(Address &adr)
{
  adr.name="Long2 John2";
}

在上面的示例中返回指针的唯一原因是如果要允许调用链接:

Modifying2(Modifying2(jdPtr));

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

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

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

但要小心指针!如果分配的字符串长度大于 init 值,则必须重新分配指针指向的空间!!!

制造

在修改指针指向的值后返回指针是多余的。在现实世界中,其他人,比如我们,或者你公司的程序员同事,会花很多时间在你的代码上。

我忘了是谁说的,但你也会花90%的时间去浏览别人的代码。

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

别这样。