【问题标题】:Pointer doesn't take value指针没有价值
【发布时间】:2012-11-08 21:11:58
【问题描述】:

我试图在一个函数中声明指向类的指针,并以这个指针作为参数调用另一个函数。另一个函数试图创建类并将指向这个新创建的类的指针分配给输入指针。

第一种方法:

size_t packetLen = 0;
ETH2::PacketEthernetII* eth = NULL; 
IPv4::PacketIPv4* ip4 = NULL;   
ICMP::PacketICMP* icmp = NULL;
TCP::PacketTCP* tcp = NULL;
UDP::PacketUDP* udp = NULL;
if (!buildPackets(formats, packetLen, eth, ip4, icmp, tcp, udp)) {}

另一种方法:

    bool Device::buildPackets(const Tokens& formats, size_t& packetLen, 
        ETH2::PacketEthernetII* eth, IPv4::PacketIPv4* ip4, 
        ICMP::PacketICMP* icmp, TCP::PacketTCP* tcp, UDP::PacketUDP* udp)
    {
        for (size_t i = 0; i < formats.size(); ++i) {       
                if (Utilities::startsWith(formats[i], ETH2PROTO)) {             
                    eth = createEthernet2(formats[i]);          
                    if (!eth) 
                        return false;           
                    packetLen += eth->len();            
                }
        }   
        return true;
}

第二种方法正在起作用,并且 eth 为对象赋值。但返回第一种方法后,eth 为空......我不知道为什么。 我错过了哪些关于指针的重要细节?

【问题讨论】:

  • 通过引用传递指针,例如ETH2::PacketEthernetII*&amp; eth 而不是 ETH2::PacketEthernetII* eth
  • 它有效,谢谢。但是为什么一定要通过引用传递呢?
  • 因为 C++ 按值传递参数。这意味着每个函数调用都会复制其所有参数,以便值的变化不会传播到函数之外。通过引用传递会更改此行为以不复制参数,从而使更改在函数外部可见。
  • @3ka5_cat:否则你会得到一个参数值的copy,它是一个指针。
  • 指向指针的指针也可以,但我更喜欢引用。

标签: c++ pointers


【解决方案1】:

引用调用:

bool Device::buildPackets(const Tokens& formats, size_t& packetLen, 
    ETH2::PacketEthernetII* &eth, IPv4::PacketIPv4* ip4, 
    ICMP::PacketICMP* icmp, TCP::PacketTCP* tcp, UDP::PacketUDP* udp)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2016-06-20
    • 1970-01-01
    • 2019-01-14
    相关资源
    最近更新 更多