在下面的代码中通过指针调用或返回指针有什么区别吗?
我只是尝试修改我的结构并获得结果。
不要说我有一个结构。
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;
}
结果相同但哪一个更安全?我的意思很明确?
答案 0 :(得分:1)
在上面的示例中返回指针的唯一原因是,如果要允许链接调用:
Modifying2(Modifying2(jdPtr));
对于这个特定的实现,这没有多大意义,因为函数只是将值设置为常量。
在所有其他情况下,返回void
可能更可取,因为你没有通过返回最初传递的相同指针获得任何东西。
答案 1 :(得分:1)
两种方法都在做同样的事情。返回指针不是必需的。
但最安全的方法是通过引用传递值。 (你没有这样实现)。在这里你必须如何做到
void Modifying4(Address &adr)
{
adr.name="Long2 John2";
}
答案 2 :(得分:0)
没有真正的区别。两者都有效。
但要注意指针!如果指定的字符串长于init-value,则必须重新分配指针所指向的空间!!!!
MFG
答案 3 :(得分:0)
修改指向的值后返回指针是多余的。 在现实世界中,像我们这样的其他人或贵公司的编码人员将花费大量时间在您的代码中。
我忘记是谁说的,但你也会花90%的时间倾注别人的代码。
如果我看到你的函数接受并返回一个指针,我会很困惑为什么你这样做,而且它似乎表明缺乏对指针如何工作的理解以及为什么你要将指针传递给函数第一名。
不要这样做。