首页 > 解决方案 > 如何访问作为指针参数指针传递给函数的结构成员?

问题描述

我有一个结构:

typedef struct addrinfo
{
    int ai_flags;
    int ai_family;
    int ai_socktype;
    int ai_protocol;
    size_t ai_addrlen;
    char *ai_canonname;
    struct sockaddr *ai_addr;
    struct addrinfo *ai_next;
} ADDRINFOA, *PADDRINFOA;

我定义了一个函数,它接受指向 struct addrinfo 类型指针的指针并通过“指针引用”返回值

void getAddress(addrinfo **addr){
     addr->ai_addr->sa_data = "0.0.0.0";   //sa_data is a member of ai_addr
}

我使用以下代码调用了函数 getAddress:

addrinfo *IPAddr = new addrinfo();
IPAddr->ai_addr = new sockaddr(); 
getAddress(&IPAddr);

我收到一个错误:

error: request for member 'ai_addr' in '* IPAddr ', which is of pointer type 'addrinfo*' (maybe you meant to use '->' ?)
*IPAddr ->ai_addr->sa_data[14] = {"10.10.10.10"};

标签: c++pointerspass-by-reference

解决方案


addr->ai_addr等价于(*addr).ai_addr(*addr)返回指向 的指针addrinfo。这就是错误消息告诉您的内容。您不能从指针访问成员。您必须取消引用addr两次,例如 (*addr)->ai_addror (**addr).ai_addr


推荐阅读