指针没有价值

时间:2012-11-08 21:11:59

标签: c++ pointers

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

第一种方法:

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

1 个答案:

答案 0 :(得分: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)