0

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

第一种方法:

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 为空......我不知道为什么。我错过了哪些关于指针的重要细节?

4

1 回答 1

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)
于 2012-11-08T21:19:52.007 回答