c++ - 如何访问作为指针参数指针传递给函数的结构成员?
问题描述
我有一个结构:
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"};
解决方案
addr->ai_addr
等价于(*addr).ai_addr
但(*addr)
返回指向 的指针addrinfo
。这就是错误消息告诉您的内容。您不能从指针访问成员。您必须取消引用addr
两次,例如 (*addr)->ai_addr
or (**addr).ai_addr
。
推荐阅读
- java - Java版本更新
- npm - 如何更改 npm 中的默认“作者”?
- kotlin - 我可以在 Runnable 中“提前返回”吗?
- python - GAE AttributeError:“凭据”对象没有属性“with_subject”
- scrapy - Scrapy:如何选择行跨度
- azure - Azure:手动将应用服务证书添加到密钥保管库
- java - Apache Commons EmailValidator 覆盖 isValidDomain
- h2o - 有什么方法可以在训练的时候取得进步吗?
- android - 从网页重定向而不修改应用程序的代码
- typescript - 为什么 linter 错误“未提供 'thisArg' 的参数”?